aboutsummaryrefslogtreecommitdiffstats
path: root/hierarchyviewer2/libs/hierarchyviewerlib
diff options
context:
space:
mode:
Diffstat (limited to 'hierarchyviewer2/libs/hierarchyviewerlib')
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/.classpath12
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/.gitignore1
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/.project17
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/.settings/README.txt2
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/.settings/org.eclipse.jdt.core.prefs98
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/Android.mk16
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/NOTICE190
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/manifest.txt1
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/Android.mk32
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/HierarchyViewerDirector.java716
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/CapturePSDAction.java62
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/DisplayViewAction.java62
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/DumpDisplayListAction.java56
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/ImageAction.java27
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/InspectScreenshotAction.java96
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/InvalidateAction.java58
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/LoadOverlayAction.java62
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/LoadViewHierarchyAction.java96
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/PixelPerfectAutoRefreshAction.java59
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/PixelPerfectEnabledAction.java82
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/RefreshPixelPerfectAction.java58
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/RefreshPixelPerfectTreeAction.java58
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/RefreshViewAction.java58
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/RefreshWindowsAction.java59
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/RequestLayoutAction.java58
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/SavePixelPerfectAction.java62
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/SaveTreeViewAction.java62
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/SelectedNodeEnabledAction.java62
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/TreeViewEnabledAction.java54
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/DeviceBridge.java668
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/DeviceConnection.java100
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/ViewNode.java362
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/Window.java77
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/WindowUpdater.java157
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/models/DeviceSelectionModel.java285
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/models/PixelPerfectModel.java361
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/models/TreeViewModel.java217
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/CaptureDisplay.java218
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/DeviceSelector.java340
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/LayoutViewer.java372
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PixelPerfect.java392
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PixelPerfectControls.java296
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PixelPerfectLoupe.java391
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PixelPerfectPixelPanel.java203
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PixelPerfectTree.java241
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PropertyViewer.java289
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/TreeView.java1086
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/TreeViewControls.java153
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/TreeViewOverview.java397
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/util/DrawableViewNode.java266
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/util/PsdFile.java508
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/util/TreeColumnResizer.java114
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/auto-refresh.pngbin541 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/capture-psd.pngbin339 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/device-view-selected.pngbin254 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/device-view.pngbin228 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/display.pngbin946 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/filtered.pngbin9242 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/green.pngbin302 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/inspect-screenshot.pngbin412 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/invalidate.pngbin391 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/load-all-views.pngbin728 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/load-overlay.pngbin549 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/load-view-hierarchy.pngbin288 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/not-selected.pngbin12468 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/on-black.pngbin157 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/on-white.pngbin158 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/pixel-perfect-view-selected.pngbin734 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/pixel-perfect-view.pngbin733 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/red.pngbin383 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/refresh-windows.pngbin872 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/request-layout.pngbin223 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/save.pngbin360 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/sdk-hierarchyviewer-128.pngbin17512 -> 0 bytes
-rwxr-xr-xhierarchyviewer2/libs/hierarchyviewerlib/src/images/sdk-hierarchyviewer-16.pngbin880 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/selected-filtered-small.pngbin5182 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/selected-filtered.pngbin9015 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/selected-small.pngbin12611 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/selected.pngbin12159 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/show-extras.pngbin330 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/show-overlay.pngbin958 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/tree-view-selected.pngbin276 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/tree-view.pngbin281 -> 0 bytes
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/images/yellow.pngbin255 -> 0 bytes
84 files changed, 0 insertions, 9769 deletions
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/.classpath b/hierarchyviewer2/libs/hierarchyviewerlib/.classpath
deleted file mode 100644
index 105d22e..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/.classpath
+++ /dev/null
@@ -1,12 +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 combineaccessrules="false" kind="src" path="/ddmlib"/>
- <classpathentry combineaccessrules="false" kind="src" path="/ddmuilib"/>
- <classpathentry kind="var" path="ANDROID_SRC/prebuilts/tools/linux-x86/swt/swt.jar"/>
- <classpathentry kind="var" path="ANDROID_SRC/prebuilts/tools/common/eclipse/org.eclipse.core.commands_3.6.0.I20100512-1500.jar"/>
- <classpathentry kind="var" path="ANDROID_SRC/prebuilts/tools/common/eclipse/org.eclipse.equinox.common_3.6.0.v20100503.jar"/>
- <classpathentry kind="var" path="ANDROID_SRC/prebuilts/tools/common/eclipse/org.eclipse.jface_3.6.2.M20110210-1200.jar"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/.gitignore b/hierarchyviewer2/libs/hierarchyviewerlib/.gitignore
deleted file mode 100644
index e660fd9..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bin/
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/.project b/hierarchyviewer2/libs/hierarchyviewerlib/.project
deleted file mode 100644
index b3c994a..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>hierarchyviewerlib</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/hierarchyviewerlib/.settings/README.txt b/hierarchyviewer2/libs/hierarchyviewerlib/.settings/README.txt
deleted file mode 100644
index 9120b20..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/.settings/README.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Copy this in eclipse project as a .settings folder at the root.
-This ensure proper compilation compliance and warning/error levels. \ No newline at end of file
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/.settings/org.eclipse.jdt.core.prefs b/hierarchyviewer2/libs/hierarchyviewerlib/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index d11c211..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,98 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
-org.eclipse.jdt.core.compiler.annotation.nonnull=com.android.annotations.NonNull
-org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=com.android.annotations.NonNullByDefault
-org.eclipse.jdt.core.compiler.annotation.nonnullisdefault=disabled
-org.eclipse.jdt.core.compiler.annotation.nullable=com.android.annotations.Nullable
-org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=error
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
-org.eclipse.jdt.core.compiler.problem.nullReference=error
-org.eclipse.jdt.core.compiler.problem.nullSpecInsufficientInfo=warning
-org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
-org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
-org.eclipse.jdt.core.compiler.problem.potentialNullSpecViolation=error
-org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.unclosedCloseable=error
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.6
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/Android.mk b/hierarchyviewer2/libs/hierarchyviewerlib/Android.mk
deleted file mode 100644
index b76c127..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/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.
-
-HIERARCHYVIEWERLIB_LOCAL_DIR := $(call my-dir)
-include $(HIERARCHYVIEWERLIB_LOCAL_DIR)/src/Android.mk
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/NOTICE b/hierarchyviewer2/libs/hierarchyviewerlib/NOTICE
deleted file mode 100644
index c5b1efa..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/NOTICE
+++ /dev/null
@@ -1,190 +0,0 @@
-
- Copyright (c) 2005-2008, 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.
-
- 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.
-
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/manifest.txt b/hierarchyviewer2/libs/hierarchyviewerlib/manifest.txt
deleted file mode 100644
index 3805b59..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/manifest.txt
+++ /dev/null
@@ -1 +0,0 @@
-Class-Path: ddmlib.jar ddmuilib.jar hierarchyviewerlib.jar org.eclipse.jface_3.6.2.M20110210-1200.jar org.eclipse.core.commands_3.6.0.I20100512-1500.jar org.eclipse.equinox.common_3.6.0.v20100503.jar
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/Android.mk b/hierarchyviewer2/libs/hierarchyviewerlib/src/Android.mk
deleted file mode 100644
index 1afbc92..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/Android.mk
+++ /dev/null
@@ -1,32 +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_RESOURCE_DIRS := ../src
-
-LOCAL_JAR_MANIFEST := ../manifest.txt
-
-LOCAL_JAVA_LIBRARIES := ddmlib \
- ddmuilib \
- swt \
- org.eclipse.jface_3.6.2.M20110210-1200 \
- org.eclipse.core.commands_3.6.0.I20100512-1500
-
-LOCAL_MODULE := hierarchyviewerlib
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/HierarchyViewerDirector.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/HierarchyViewerDirector.java
deleted file mode 100644
index 2e03f11..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/HierarchyViewerDirector.java
+++ /dev/null
@@ -1,716 +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.hierarchyviewerlib;
-
-import com.android.ddmlib.AdbCommandRejectedException;
-import com.android.ddmlib.AndroidDebugBridge;
-import com.android.ddmlib.AndroidDebugBridge.IDeviceChangeListener;
-import com.android.ddmlib.IDevice;
-import com.android.ddmlib.Log;
-import com.android.ddmlib.RawImage;
-import com.android.ddmlib.TimeoutException;
-import com.android.hierarchyviewerlib.device.DeviceBridge;
-import com.android.hierarchyviewerlib.device.DeviceBridge.ViewServerInfo;
-import com.android.hierarchyviewerlib.device.ViewNode;
-import com.android.hierarchyviewerlib.device.Window;
-import com.android.hierarchyviewerlib.device.WindowUpdater;
-import com.android.hierarchyviewerlib.device.WindowUpdater.IWindowChangeListener;
-import com.android.hierarchyviewerlib.models.DeviceSelectionModel;
-import com.android.hierarchyviewerlib.models.PixelPerfectModel;
-import com.android.hierarchyviewerlib.models.TreeViewModel;
-import com.android.hierarchyviewerlib.ui.CaptureDisplay;
-import com.android.hierarchyviewerlib.ui.TreeView;
-import com.android.hierarchyviewerlib.ui.util.DrawableViewNode;
-import com.android.hierarchyviewerlib.ui.util.PsdFile;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.SWTException;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.ImageLoader;
-import org.eclipse.swt.graphics.PaletteData;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.FileDialog;
-import org.eclipse.swt.widgets.Shell;
-
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.Timer;
-import java.util.TimerTask;
-
-/**
- * This is the class where most of the logic resides.
- */
-public abstract class HierarchyViewerDirector implements IDeviceChangeListener,
- IWindowChangeListener {
-
- protected static HierarchyViewerDirector sDirector;
-
- public static final String TAG = "hierarchyviewer";
-
- private int mPixelPerfectRefreshesInProgress = 0;
-
- private Timer mPixelPerfectRefreshTimer = new Timer();
-
- private boolean mAutoRefresh = false;
-
- public static final int DEFAULT_PIXEL_PERFECT_AUTOREFRESH_INTERVAL = 5;
-
- private int mPixelPerfectAutoRefreshInterval = DEFAULT_PIXEL_PERFECT_AUTOREFRESH_INTERVAL;
-
- private PixelPerfectAutoRefreshTask mCurrentAutoRefreshTask;
-
- private String mFilterText = ""; //$NON-NLS-1$
-
- public void terminate() {
- WindowUpdater.terminate();
- mPixelPerfectRefreshTimer.cancel();
- }
-
- public abstract String getAdbLocation();
-
- public static HierarchyViewerDirector getDirector() {
- return sDirector;
- }
-
- /**
- * Init the DeviceBridge with an existing {@link AndroidDebugBridge}.
- * @param bridge the bridge object to use
- */
- public void acquireBridge(AndroidDebugBridge bridge) {
- DeviceBridge.acquireBridge(bridge);
- }
-
- /**
- * Creates an {@link AndroidDebugBridge} connected to adb at the given location.
- *
- * If a bridge is already running, this disconnects it and creates a new one.
- *
- * @param adbLocation the location to adb.
- */
- public void initDebugBridge() {
- DeviceBridge.initDebugBridge(getAdbLocation());
- }
-
- public void stopDebugBridge() {
- DeviceBridge.terminate();
- }
-
- public void populateDeviceSelectionModel() {
- IDevice[] devices = DeviceBridge.getDevices();
- for (IDevice device : devices) {
- deviceConnected(device);
- }
- }
-
- public void startListenForDevices() {
- DeviceBridge.startListenForDevices(this);
- }
-
- public void stopListenForDevices() {
- DeviceBridge.stopListenForDevices(this);
- }
-
- public abstract void executeInBackground(String taskName, Runnable task);
-
- @Override
- public void deviceConnected(final IDevice device) {
- executeInBackground("Connecting device", new Runnable() {
- @Override
- public void run() {
- if (DeviceSelectionModel.getModel().containsDevice(device)) {
- windowsChanged(device);
- } else if (device.isOnline()) {
- DeviceBridge.setupDeviceForward(device);
- if (!DeviceBridge.isViewServerRunning(device)) {
- if (!DeviceBridge.startViewServer(device)) {
- // Let's do something interesting here... Try again
- // in 2 seconds.
- try {
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- }
- if (!DeviceBridge.startViewServer(device)) {
- Log.e(TAG, "Unable to debug device " + device);
- DeviceBridge.removeDeviceForward(device);
- } else {
- loadViewServerInfoAndWindows(device);
- }
- return;
- }
- }
- loadViewServerInfoAndWindows(device);
- }
- }
- });
- }
-
- private void loadViewServerInfoAndWindows(final IDevice device) {
-
- ViewServerInfo viewServerInfo = DeviceBridge.loadViewServerInfo(device);
- if (viewServerInfo == null) {
- return;
- }
- Window[] windows = DeviceBridge.loadWindows(device);
- DeviceSelectionModel.getModel().addDevice(device, windows, viewServerInfo);
- if (viewServerInfo.protocolVersion >= 3) {
- WindowUpdater.startListenForWindowChanges(HierarchyViewerDirector.this, device);
- focusChanged(device);
- }
-
- }
-
- @Override
- public void deviceDisconnected(final IDevice device) {
- executeInBackground("Disconnecting device", new Runnable() {
- @Override
- public void run() {
- ViewServerInfo viewServerInfo = DeviceBridge.getViewServerInfo(device);
- if (viewServerInfo != null && viewServerInfo.protocolVersion >= 3) {
- WindowUpdater.stopListenForWindowChanges(HierarchyViewerDirector.this, device);
- }
- DeviceBridge.removeDeviceForward(device);
- DeviceBridge.removeViewServerInfo(device);
- DeviceSelectionModel.getModel().removeDevice(device);
- if (PixelPerfectModel.getModel().getDevice() == device) {
- PixelPerfectModel.getModel().setData(null, null, null);
- }
- Window treeViewWindow = TreeViewModel.getModel().getWindow();
- if (treeViewWindow != null && treeViewWindow.getDevice() == device) {
- TreeViewModel.getModel().setData(null, null);
- mFilterText = ""; //$NON-NLS-1$
- }
- }
- });
- }
-
- @Override
- public void deviceChanged(IDevice device, int changeMask) {
- if ((changeMask & IDevice.CHANGE_STATE) != 0 && device.isOnline()) {
- deviceConnected(device);
- }
- }
-
- @Override
- public void windowsChanged(final IDevice device) {
- executeInBackground("Refreshing windows", new Runnable() {
- @Override
- public void run() {
- if (!DeviceBridge.isViewServerRunning(device)) {
- if (!DeviceBridge.startViewServer(device)) {
- Log.e(TAG, "Unable to debug device " + device);
- return;
- }
- }
- Window[] windows = DeviceBridge.loadWindows(device);
- DeviceSelectionModel.getModel().updateDevice(device, windows);
- }
- });
- }
-
- @Override
- public void focusChanged(final IDevice device) {
- executeInBackground("Updating focus", new Runnable() {
- @Override
- public void run() {
- int focusedWindow = DeviceBridge.getFocusedWindow(device);
- DeviceSelectionModel.getModel().updateFocusedWindow(device, focusedWindow);
- }
- });
- }
-
- public void refreshPixelPerfect() {
- final IDevice device = PixelPerfectModel.getModel().getDevice();
- if (device != null) {
- // Some interesting logic here. We don't want to refresh the pixel
- // perfect view 1000 times in a row if the focus keeps changing. We
- // just
- // want it to refresh following the last focus change.
- boolean proceed = false;
- synchronized (this) {
- if (mPixelPerfectRefreshesInProgress <= 1) {
- proceed = true;
- mPixelPerfectRefreshesInProgress++;
- }
- }
- if (proceed) {
- executeInBackground("Refreshing pixel perfect screenshot", new Runnable() {
- @Override
- public void run() {
- Image screenshotImage = getScreenshotImage(device);
- if (screenshotImage != null) {
- PixelPerfectModel.getModel().setImage(screenshotImage);
- }
- synchronized (HierarchyViewerDirector.this) {
- mPixelPerfectRefreshesInProgress--;
- }
- }
-
- });
- }
- }
- }
-
- public void refreshPixelPerfectTree() {
- final IDevice device = PixelPerfectModel.getModel().getDevice();
- if (device != null) {
- executeInBackground("Refreshing pixel perfect tree", new Runnable() {
- @Override
- public void run() {
- ViewNode viewNode =
- DeviceBridge.loadWindowData(Window.getFocusedWindow(device));
- if (viewNode != null) {
- PixelPerfectModel.getModel().setTree(viewNode);
- }
- }
-
- });
- }
- }
-
- public void loadPixelPerfectData(final IDevice device) {
- executeInBackground("Loading pixel perfect data", new Runnable() {
- @Override
- public void run() {
- Image screenshotImage = getScreenshotImage(device);
- if (screenshotImage != null) {
- ViewNode viewNode =
- DeviceBridge.loadWindowData(Window.getFocusedWindow(device));
- if (viewNode != null) {
- PixelPerfectModel.getModel().setData(device, screenshotImage, viewNode);
- }
- }
- }
- });
- }
-
- private Image getScreenshotImage(IDevice device) {
- try {
- final RawImage screenshot = device.getScreenshot();
- if (screenshot == null) {
- return null;
- }
- class ImageContainer {
- public Image image;
- }
- final ImageContainer imageContainer = new ImageContainer();
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- ImageData imageData =
- new ImageData(screenshot.width, screenshot.height, screenshot.bpp,
- new PaletteData(screenshot.getRedMask(), screenshot
- .getGreenMask(), screenshot.getBlueMask()), 1,
- screenshot.data);
- imageContainer.image = new Image(Display.getDefault(), imageData);
- }
- });
- return imageContainer.image;
- } catch (IOException e) {
- Log.e(TAG, "Unable to load screenshot from device " + device);
- } catch (TimeoutException e) {
- Log.e(TAG, "Timeout loading screenshot from device " + device);
- } catch (AdbCommandRejectedException e) {
- Log.e(TAG, "Adb rejected command to load screenshot from device " + device);
- }
- return null;
- }
-
- public void loadViewTreeData(final Window window) {
- executeInBackground("Loading view hierarchy", new Runnable() {
- @Override
- public void run() {
-
- mFilterText = ""; //$NON-NLS-1$
-
- ViewNode viewNode = DeviceBridge.loadWindowData(window);
- if (viewNode != null) {
- DeviceBridge.loadProfileData(window, viewNode);
- viewNode.setViewCount();
- TreeViewModel.getModel().setData(window, viewNode);
- }
- }
- });
- }
-
- public void loadOverlay(final Shell shell) {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- FileDialog fileDialog = new FileDialog(shell, SWT.OPEN);
- fileDialog.setFilterExtensions(new String[] {
- "*.jpg;*.jpeg;*.png;*.gif;*.bmp" //$NON-NLS-1$
- });
- fileDialog.setFilterNames(new String[] {
- "Image (*.jpg, *.jpeg, *.png, *.gif, *.bmp)"
- });
- fileDialog.setText("Choose an overlay image");
- String fileName = fileDialog.open();
- if (fileName != null) {
- try {
- Image image = new Image(Display.getDefault(), fileName);
- PixelPerfectModel.getModel().setOverlayImage(image);
- } catch (SWTException e) {
- Log.e(TAG, "Unable to load image from " + fileName);
- }
- }
- }
- });
- }
-
- public void showCapture(final Shell shell, final ViewNode viewNode) {
- executeInBackground("Capturing node", new Runnable() {
- @Override
- public void run() {
- final Image image = loadCapture(viewNode);
- if (image != null) {
-
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- CaptureDisplay.show(shell, viewNode, image);
- }
- });
- }
- }
- });
- }
-
- public Image loadCapture(ViewNode viewNode) {
- final Image image = DeviceBridge.loadCapture(viewNode.window, viewNode);
- if (image != null) {
- viewNode.image = image;
-
- // Force the layout viewer to redraw.
- TreeViewModel.getModel().notifySelectionChanged();
- }
- return image;
- }
-
- public void loadCaptureInBackground(final ViewNode viewNode) {
- executeInBackground("Capturing node", new Runnable() {
- @Override
- public void run() {
- loadCapture(viewNode);
- }
- });
- }
-
- public void showCapture(Shell shell) {
- DrawableViewNode viewNode = TreeViewModel.getModel().getSelection();
- if (viewNode != null) {
- showCapture(shell, viewNode.viewNode);
- }
- }
-
- public void refreshWindows() {
- executeInBackground("Refreshing windows", new Runnable() {
- @Override
- public void run() {
- IDevice[] devicesA = DeviceSelectionModel.getModel().getDevices();
- IDevice[] devicesB = DeviceBridge.getDevices();
- HashSet<IDevice> deviceSet = new HashSet<IDevice>();
- for (int i = 0; i < devicesB.length; i++) {
- deviceSet.add(devicesB[i]);
- }
- for (int i = 0; i < devicesA.length; i++) {
- if (deviceSet.contains(devicesA[i])) {
- windowsChanged(devicesA[i]);
- deviceSet.remove(devicesA[i]);
- } else {
- deviceDisconnected(devicesA[i]);
- }
- }
- for (IDevice device : deviceSet) {
- deviceConnected(device);
- }
- }
- });
- }
-
- public void loadViewHierarchy() {
- Window window = DeviceSelectionModel.getModel().getSelectedWindow();
- if (window != null) {
- loadViewTreeData(window);
- }
- }
-
- public void inspectScreenshot() {
- IDevice device = DeviceSelectionModel.getModel().getSelectedDevice();
- if (device != null) {
- loadPixelPerfectData(device);
- }
- }
-
- public void saveTreeView(final Shell shell) {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- final DrawableViewNode viewNode = TreeViewModel.getModel().getTree();
- if (viewNode != null) {
- FileDialog fileDialog = new FileDialog(shell, SWT.SAVE);
- fileDialog.setFilterExtensions(new String[] {
- "*.png" //$NON-NLS-1$
- });
- fileDialog.setFilterNames(new String[] {
- "Portable Network Graphics File (*.png)"
- });
- fileDialog.setText("Choose where to save the tree image");
- final String fileName = fileDialog.open();
- if (fileName != null) {
- executeInBackground("Saving tree view", new Runnable() {
- @Override
- public void run() {
- Image image = TreeView.paintToImage(viewNode);
- ImageLoader imageLoader = new ImageLoader();
- imageLoader.data = new ImageData[] {
- image.getImageData()
- };
- String extensionedFileName = fileName;
- if (!extensionedFileName.toLowerCase().endsWith(".png")) { //$NON-NLS-1$
- extensionedFileName += ".png"; //$NON-NLS-1$
- }
- try {
- imageLoader.save(extensionedFileName, SWT.IMAGE_PNG);
- } catch (SWTException e) {
- Log.e(TAG, "Unable to save tree view as a PNG image at "
- + fileName);
- }
- image.dispose();
- }
- });
- }
- }
- }
- });
- }
-
- public void savePixelPerfect(final Shell shell) {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- Image untouchableImage = PixelPerfectModel.getModel().getImage();
- if (untouchableImage != null) {
- final ImageData imageData = untouchableImage.getImageData();
- FileDialog fileDialog = new FileDialog(shell, SWT.SAVE);
- fileDialog.setFilterExtensions(new String[] {
- "*.png" //$NON-NLS-1$
- });
- fileDialog.setFilterNames(new String[] {
- "Portable Network Graphics File (*.png)"
- });
- fileDialog.setText("Choose where to save the screenshot");
- final String fileName = fileDialog.open();
- if (fileName != null) {
- executeInBackground("Saving pixel perfect", new Runnable() {
- @Override
- public void run() {
- ImageLoader imageLoader = new ImageLoader();
- imageLoader.data = new ImageData[] {
- imageData
- };
- String extensionedFileName = fileName;
- if (!extensionedFileName.toLowerCase().endsWith(".png")) { //$NON-NLS-1$
- extensionedFileName += ".png"; //$NON-NLS-1$
- }
- try {
- imageLoader.save(extensionedFileName, SWT.IMAGE_PNG);
- } catch (SWTException e) {
- Log.e(TAG, "Unable to save tree view as a PNG image at "
- + fileName);
- }
- }
- });
- }
- }
- }
- });
- }
-
- public void capturePSD(final Shell shell) {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- final Window window = TreeViewModel.getModel().getWindow();
- if (window != null) {
- FileDialog fileDialog = new FileDialog(shell, SWT.SAVE);
- fileDialog.setFilterExtensions(new String[] {
- "*.psd" //$NON-NLS-1$
- });
- fileDialog.setFilterNames(new String[] {
- "Photoshop Document (*.psd)"
- });
- fileDialog.setText("Choose where to save the window layers");
- final String fileName = fileDialog.open();
- if (fileName != null) {
- executeInBackground("Saving window layers", new Runnable() {
- @Override
- public void run() {
- PsdFile psdFile = DeviceBridge.captureLayers(window);
- if (psdFile != null) {
- String extensionedFileName = fileName;
- if (!extensionedFileName.toLowerCase().endsWith(".psd")) { //$NON-NLS-1$
- extensionedFileName += ".psd"; //$NON-NLS-1$
- }
- try {
- psdFile.write(new FileOutputStream(extensionedFileName));
- } catch (FileNotFoundException e) {
- Log.e(TAG, "Unable to write to file " + fileName);
- }
- }
- }
- });
- }
- }
- }
- });
- }
-
- public void reloadViewHierarchy() {
- Window window = TreeViewModel.getModel().getWindow();
- if (window != null) {
- loadViewTreeData(window);
- }
- }
-
- public void invalidateCurrentNode() {
- final DrawableViewNode selectedNode = TreeViewModel.getModel().getSelection();
- if (selectedNode != null) {
- executeInBackground("Invalidating view", new Runnable() {
- @Override
- public void run() {
- DeviceBridge.invalidateView(selectedNode.viewNode);
- }
- });
- }
- }
-
- public void relayoutCurrentNode() {
- final DrawableViewNode selectedNode = TreeViewModel.getModel().getSelection();
- if (selectedNode != null) {
- executeInBackground("Request layout", new Runnable() {
- @Override
- public void run() {
- DeviceBridge.requestLayout(selectedNode.viewNode);
- }
- });
- }
- }
-
- public void dumpDisplayListForCurrentNode() {
- final DrawableViewNode selectedNode = TreeViewModel.getModel().getSelection();
- if (selectedNode != null) {
- executeInBackground("Dump displaylist", new Runnable() {
- @Override
- public void run() {
- DeviceBridge.outputDisplayList(selectedNode.viewNode);
- }
- });
- }
- }
-
- public void loadAllViews() {
- executeInBackground("Loading all views", new Runnable() {
- @Override
- public void run() {
- DrawableViewNode tree = TreeViewModel.getModel().getTree();
- if (tree != null) {
- loadViewRecursive(tree.viewNode);
- // Force the layout viewer to redraw.
- TreeViewModel.getModel().notifySelectionChanged();
- }
- }
- });
- }
-
- private void loadViewRecursive(ViewNode viewNode) {
- Image image = DeviceBridge.loadCapture(viewNode.window, viewNode);
- if (image == null) {
- return;
- }
- viewNode.image = image;
- final int N = viewNode.children.size();
- for (int i = 0; i < N; i++) {
- loadViewRecursive(viewNode.children.get(i));
- }
- }
-
- public void filterNodes(String filterText) {
- this.mFilterText = filterText;
- DrawableViewNode tree = TreeViewModel.getModel().getTree();
- if (tree != null) {
- tree.viewNode.filter(filterText);
- // Force redraw
- TreeViewModel.getModel().notifySelectionChanged();
- }
- }
-
- public String getFilterText() {
- return mFilterText;
- }
-
- private static class PixelPerfectAutoRefreshTask extends TimerTask {
- @Override
- public void run() {
- HierarchyViewerDirector.getDirector().refreshPixelPerfect();
- }
- };
-
- public void setPixelPerfectAutoRefresh(boolean value) {
- synchronized (mPixelPerfectRefreshTimer) {
- if (value == mAutoRefresh) {
- return;
- }
- mAutoRefresh = value;
- if (mAutoRefresh) {
- mCurrentAutoRefreshTask = new PixelPerfectAutoRefreshTask();
- mPixelPerfectRefreshTimer.schedule(mCurrentAutoRefreshTask,
- mPixelPerfectAutoRefreshInterval * 1000,
- mPixelPerfectAutoRefreshInterval * 1000);
- } else {
- mCurrentAutoRefreshTask.cancel();
- mCurrentAutoRefreshTask = null;
- }
- }
- }
-
- public void setPixelPerfectAutoRefreshInterval(int value) {
- synchronized (mPixelPerfectRefreshTimer) {
- if (mPixelPerfectAutoRefreshInterval == value) {
- return;
- }
- mPixelPerfectAutoRefreshInterval = value;
- if (mAutoRefresh) {
- mCurrentAutoRefreshTask.cancel();
- long timeLeft =
- Math.max(0, mPixelPerfectAutoRefreshInterval
- * 1000
- - (System.currentTimeMillis() - mCurrentAutoRefreshTask
- .scheduledExecutionTime()));
- mCurrentAutoRefreshTask = new PixelPerfectAutoRefreshTask();
- mPixelPerfectRefreshTimer.schedule(mCurrentAutoRefreshTask, timeLeft,
- mPixelPerfectAutoRefreshInterval * 1000);
- }
- }
- }
-
- public int getPixelPerfectAutoRefreshInverval() {
- return mPixelPerfectAutoRefreshInterval;
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/CapturePSDAction.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/CapturePSDAction.java
deleted file mode 100644
index f1f7ad6..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/CapturePSDAction.java
+++ /dev/null
@@ -1,62 +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.hierarchyviewerlib.actions;
-
-import com.android.ddmuilib.ImageLoader;
-import com.android.hierarchyviewerlib.HierarchyViewerDirector;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-
-public class CapturePSDAction extends TreeViewEnabledAction implements ImageAction {
-
- private static CapturePSDAction sAction;
-
- private Image mImage;
-
- private Shell mShell;
-
- private CapturePSDAction(Shell shell) {
- super("&Capture Layers");
- this.mShell = shell;
- setAccelerator(SWT.MOD1 + 'C');
- ImageLoader imageLoader = ImageLoader.getLoader(HierarchyViewerDirector.class);
- mImage = imageLoader.loadImage("capture-psd.png", Display.getDefault()); //$NON-NLS-1$
- setImageDescriptor(ImageDescriptor.createFromImage(mImage));
- setToolTipText("Capture the window layers as a photoshop document");
- }
-
- public static CapturePSDAction getAction(Shell shell) {
- if (sAction == null) {
- sAction = new CapturePSDAction(shell);
- }
- return sAction;
- }
-
- @Override
- public void run() {
- HierarchyViewerDirector.getDirector().capturePSD(mShell);
- }
-
- @Override
- public Image getImage() {
- return mImage;
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/DisplayViewAction.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/DisplayViewAction.java
deleted file mode 100644
index 7da02d7..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/DisplayViewAction.java
+++ /dev/null
@@ -1,62 +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.hierarchyviewerlib.actions;
-
-import com.android.ddmuilib.ImageLoader;
-import com.android.hierarchyviewerlib.HierarchyViewerDirector;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-
-public class DisplayViewAction extends SelectedNodeEnabledAction implements ImageAction {
-
- private static DisplayViewAction sAction;
-
- private Image mImage;
-
- private Shell mShell;
-
- private DisplayViewAction(Shell shell) {
- super("&Display View");
- this.mShell = shell;
- setAccelerator(SWT.MOD1 + 'D');
- ImageLoader imageLoader = ImageLoader.getLoader(HierarchyViewerDirector.class);
- mImage = imageLoader.loadImage("display.png", Display.getDefault()); //$NON-NLS-1$
- setImageDescriptor(ImageDescriptor.createFromImage(mImage));
- setToolTipText("Display the selected view image in a separate window");
- }
-
- public static DisplayViewAction getAction(Shell shell) {
- if (sAction == null) {
- sAction = new DisplayViewAction(shell);
- }
- return sAction;
- }
-
- @Override
- public void run() {
- HierarchyViewerDirector.getDirector().showCapture(mShell);
- }
-
- @Override
- public Image getImage() {
- return mImage;
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/DumpDisplayListAction.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/DumpDisplayListAction.java
deleted file mode 100644
index fdbc7ef..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/DumpDisplayListAction.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2011 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.actions;
-
-import com.android.ddmuilib.ImageLoader;
-import com.android.hierarchyviewerlib.HierarchyViewerDirector;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-
-public class DumpDisplayListAction extends SelectedNodeEnabledAction implements ImageAction {
-
- private static DumpDisplayListAction sAction;
-
- private Image mImage;
-
- private DumpDisplayListAction() {
- super("Dump DisplayList");
- ImageLoader imageLoader = ImageLoader.getLoader(HierarchyViewerDirector.class);
- mImage = imageLoader.loadImage("load-view-hierarchy.png", Display.getDefault()); //$NON-NLS-1$
- setImageDescriptor(ImageDescriptor.createFromImage(mImage));
- setToolTipText("Request the view to output its displaylist to logcat");
- }
-
- public static DumpDisplayListAction getAction() {
- if (sAction == null) {
- sAction = new DumpDisplayListAction();
- }
- return sAction;
- }
-
- @Override
- public void run() {
- HierarchyViewerDirector.getDirector().dumpDisplayListForCurrentNode();
- }
-
- @Override
- public Image getImage() {
- return mImage;
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/ImageAction.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/ImageAction.java
deleted file mode 100644
index 08320fd..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/ImageAction.java
+++ /dev/null
@@ -1,27 +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.hierarchyviewerlib.actions;
-
-import org.eclipse.swt.graphics.Image;
-
-public interface ImageAction {
- public Image getImage();
-
- public String getText();
-
- public String getToolTipText();
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/InspectScreenshotAction.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/InspectScreenshotAction.java
deleted file mode 100644
index 708c7b1..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/InspectScreenshotAction.java
+++ /dev/null
@@ -1,96 +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.hierarchyviewerlib.actions;
-
-import com.android.ddmlib.IDevice;
-import com.android.ddmuilib.ImageLoader;
-import com.android.hierarchyviewerlib.HierarchyViewerDirector;
-import com.android.hierarchyviewerlib.device.Window;
-import com.android.hierarchyviewerlib.models.DeviceSelectionModel;
-import com.android.hierarchyviewerlib.models.DeviceSelectionModel.IWindowChangeListener;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-
-public class InspectScreenshotAction extends Action implements ImageAction, IWindowChangeListener {
-
- private static InspectScreenshotAction sAction;
-
- private Image mImage;
-
- private InspectScreenshotAction() {
- super("Inspect &Screenshot");
- setAccelerator(SWT.MOD1 + 'S');
- ImageLoader imageLoader = ImageLoader.getLoader(HierarchyViewerDirector.class);
- mImage = imageLoader.loadImage("inspect-screenshot.png", Display.getDefault()); //$NON-NLS-1$
- setImageDescriptor(ImageDescriptor.createFromImage(mImage));
- setToolTipText("Inspect a screenshot in the pixel perfect view");
- setEnabled(
- DeviceSelectionModel.getModel().getSelectedDevice() != null);
- DeviceSelectionModel.getModel().addWindowChangeListener(this);
- }
-
- public static InspectScreenshotAction getAction() {
- if (sAction == null) {
- sAction = new InspectScreenshotAction();
- }
- return sAction;
- }
-
- @Override
- public void run() {
- HierarchyViewerDirector.getDirector().inspectScreenshot();
- }
-
- @Override
- public Image getImage() {
- return mImage;
- }
-
- @Override
- public void deviceChanged(IDevice device) {
- // pass
- }
-
- @Override
- public void deviceConnected(IDevice device) {
- // pass
- }
-
- @Override
- public void deviceDisconnected(IDevice device) {
- // pass
- }
-
- @Override
- public void focusChanged(IDevice device) {
- // pass
- }
-
- @Override
- public void selectionChanged(final IDevice device, final Window window) {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- InspectScreenshotAction.getAction().setEnabled(device != null);
- }
- });
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/InvalidateAction.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/InvalidateAction.java
deleted file mode 100644
index b884220..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/InvalidateAction.java
+++ /dev/null
@@ -1,58 +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.hierarchyviewerlib.actions;
-
-import com.android.ddmuilib.ImageLoader;
-import com.android.hierarchyviewerlib.HierarchyViewerDirector;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-
-public class InvalidateAction extends SelectedNodeEnabledAction implements ImageAction {
-
- private static InvalidateAction sAction;
-
- private Image mImage;
-
- private InvalidateAction() {
- super("&Invalidate Layout");
- setAccelerator(SWT.MOD1 + 'I');
- ImageLoader imageLoader = ImageLoader.getLoader(HierarchyViewerDirector.class);
- mImage = imageLoader.loadImage("invalidate.png", Display.getDefault()); //$NON-NLS-1$
- setImageDescriptor(ImageDescriptor.createFromImage(mImage));
- setToolTipText("Invalidate the layout for the current window");
- }
-
- public static InvalidateAction getAction() {
- if (sAction == null) {
- sAction = new InvalidateAction();
- }
- return sAction;
- }
-
- @Override
- public void run() {
- HierarchyViewerDirector.getDirector().invalidateCurrentNode();
- }
-
- @Override
- public Image getImage() {
- return mImage;
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/LoadOverlayAction.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/LoadOverlayAction.java
deleted file mode 100644
index 1876358..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/LoadOverlayAction.java
+++ /dev/null
@@ -1,62 +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.hierarchyviewerlib.actions;
-
-import com.android.ddmuilib.ImageLoader;
-import com.android.hierarchyviewerlib.HierarchyViewerDirector;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-
-public class LoadOverlayAction extends PixelPerfectEnabledAction implements ImageAction {
-
- private static LoadOverlayAction sAction;
-
- private Image mImage;
-
- private Shell mShell;
-
- private LoadOverlayAction(Shell shell) {
- super("Load &Overlay");
- this.mShell = shell;
- setAccelerator(SWT.MOD1 + 'O');
- ImageLoader imageLoader = ImageLoader.getLoader(HierarchyViewerDirector.class);
- mImage = imageLoader.loadImage("load-overlay.png", Display.getDefault()); //$NON-NLS-1$
- setImageDescriptor(ImageDescriptor.createFromImage(mImage));
- setToolTipText("Load an image to overlay the screenshot");
- }
-
- public static LoadOverlayAction getAction(Shell shell) {
- if (sAction == null) {
- sAction = new LoadOverlayAction(shell);
- }
- return sAction;
- }
-
- @Override
- public void run() {
- HierarchyViewerDirector.getDirector().loadOverlay(mShell);
- }
-
- @Override
- public Image getImage() {
- return mImage;
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/LoadViewHierarchyAction.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/LoadViewHierarchyAction.java
deleted file mode 100644
index f2dbaee..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/LoadViewHierarchyAction.java
+++ /dev/null
@@ -1,96 +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.hierarchyviewerlib.actions;
-
-import com.android.ddmlib.IDevice;
-import com.android.ddmuilib.ImageLoader;
-import com.android.hierarchyviewerlib.HierarchyViewerDirector;
-import com.android.hierarchyviewerlib.device.Window;
-import com.android.hierarchyviewerlib.models.DeviceSelectionModel;
-import com.android.hierarchyviewerlib.models.DeviceSelectionModel.IWindowChangeListener;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-
-public class LoadViewHierarchyAction extends Action implements ImageAction, IWindowChangeListener {
-
- private static LoadViewHierarchyAction sAction;
-
- private Image mImage;
-
- private LoadViewHierarchyAction() {
- super("Load View &Hierarchy");
- setAccelerator(SWT.MOD1 + 'H');
- ImageLoader imageLoader = ImageLoader.getLoader(HierarchyViewerDirector.class);
- mImage = imageLoader.loadImage("load-view-hierarchy.png", Display.getDefault()); //$NON-NLS-1$
- setImageDescriptor(ImageDescriptor.createFromImage(mImage));
- setToolTipText("Load the view hierarchy into the tree view");
- setEnabled(
- DeviceSelectionModel.getModel().getSelectedWindow() != null);
- DeviceSelectionModel.getModel().addWindowChangeListener(this);
- }
-
- public static LoadViewHierarchyAction getAction() {
- if (sAction == null) {
- sAction = new LoadViewHierarchyAction();
- }
- return sAction;
- }
-
- @Override
- public void run() {
- HierarchyViewerDirector.getDirector().loadViewHierarchy();
- }
-
- @Override
- public Image getImage() {
- return mImage;
- }
-
- @Override
- public void deviceChanged(IDevice device) {
- // pass
- }
-
- @Override
- public void deviceConnected(IDevice device) {
- // pass
- }
-
- @Override
- public void deviceDisconnected(IDevice device) {
- // pass
- }
-
- @Override
- public void focusChanged(IDevice device) {
- // pass
- }
-
- @Override
- public void selectionChanged(final IDevice device, final Window window) {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- LoadViewHierarchyAction.getAction().setEnabled(window != null);
- }
- });
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/PixelPerfectAutoRefreshAction.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/PixelPerfectAutoRefreshAction.java
deleted file mode 100644
index a47c143..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/PixelPerfectAutoRefreshAction.java
+++ /dev/null
@@ -1,59 +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.hierarchyviewerlib.actions;
-
-import com.android.ddmuilib.ImageLoader;
-import com.android.hierarchyviewerlib.HierarchyViewerDirector;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-
-public class PixelPerfectAutoRefreshAction extends PixelPerfectEnabledAction implements ImageAction {
-
- private static PixelPerfectAutoRefreshAction sAction;
-
- private Image mImage;
-
- private PixelPerfectAutoRefreshAction() {
- super("Auto &Refresh", Action.AS_CHECK_BOX);
- setAccelerator(SWT.MOD1 + 'R');
- ImageLoader imageLoader = ImageLoader.getLoader(HierarchyViewerDirector.class);
- mImage = imageLoader.loadImage("auto-refresh.png", Display.getDefault()); //$NON-NLS-1$
- setImageDescriptor(ImageDescriptor.createFromImage(mImage));
- setToolTipText("Automatically refresh the screenshot");
- }
-
- public static PixelPerfectAutoRefreshAction getAction() {
- if (sAction == null) {
- sAction = new PixelPerfectAutoRefreshAction();
- }
- return sAction;
- }
-
- @Override
- public void run() {
- HierarchyViewerDirector.getDirector().setPixelPerfectAutoRefresh(sAction.isChecked());
- }
-
- @Override
- public Image getImage() {
- return mImage;
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/PixelPerfectEnabledAction.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/PixelPerfectEnabledAction.java
deleted file mode 100644
index 33cb343..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/PixelPerfectEnabledAction.java
+++ /dev/null
@@ -1,82 +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.hierarchyviewerlib.actions;
-
-import com.android.hierarchyviewerlib.models.PixelPerfectModel;
-import com.android.hierarchyviewerlib.models.PixelPerfectModel.IImageChangeListener;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.swt.widgets.Display;
-
-public class PixelPerfectEnabledAction extends Action implements IImageChangeListener {
- public PixelPerfectEnabledAction(String name) {
- super(name);
- setEnabled(PixelPerfectModel.getModel().getImage() != null);
- PixelPerfectModel.getModel().addImageChangeListener(this);
- }
-
- public PixelPerfectEnabledAction(String name, int type) {
- super(name, type);
- setEnabled(PixelPerfectModel.getModel().getImage() != null);
- PixelPerfectModel.getModel().addImageChangeListener(this);
- }
-
- @Override
- public void crosshairMoved() {
- // pass
- }
-
- @Override
- public void imageChanged() {
- //
- }
-
- @Override
- public void imageLoaded() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- setEnabled(PixelPerfectModel.getModel().getImage() != null);
- }
- });
- }
-
- @Override
- public void overlayChanged() {
- // pass
- }
-
- @Override
- public void overlayTransparencyChanged() {
- // pass
- }
-
- @Override
- public void selectionChanged() {
- // pass
- }
-
- @Override
- public void treeChanged() {
- // pass
- }
-
- @Override
- public void zoomChanged() {
- // pass
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/RefreshPixelPerfectAction.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/RefreshPixelPerfectAction.java
deleted file mode 100644
index 54f53c8..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/RefreshPixelPerfectAction.java
+++ /dev/null
@@ -1,58 +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.hierarchyviewerlib.actions;
-
-import com.android.ddmuilib.ImageLoader;
-import com.android.hierarchyviewerlib.HierarchyViewerDirector;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-
-public class RefreshPixelPerfectAction extends PixelPerfectEnabledAction implements ImageAction {
-
- private static RefreshPixelPerfectAction sAction;
-
- private Image mImage;
-
- private RefreshPixelPerfectAction() {
- super("&Refresh Screenshot");
- setAccelerator(SWT.F5);
- ImageLoader imageLoader = ImageLoader.getLoader(HierarchyViewerDirector.class);
- mImage = imageLoader.loadImage("refresh-windows.png", Display.getDefault()); //$NON-NLS-1$
- setImageDescriptor(ImageDescriptor.createFromImage(mImage));
- setToolTipText("Refresh the screenshot");
- }
-
- public static RefreshPixelPerfectAction getAction() {
- if (sAction == null) {
- sAction = new RefreshPixelPerfectAction();
- }
- return sAction;
- }
-
- @Override
- public void run() {
- HierarchyViewerDirector.getDirector().refreshPixelPerfect();
- }
-
- @Override
- public Image getImage() {
- return mImage;
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/RefreshPixelPerfectTreeAction.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/RefreshPixelPerfectTreeAction.java
deleted file mode 100644
index e9d1c56..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/RefreshPixelPerfectTreeAction.java
+++ /dev/null
@@ -1,58 +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.hierarchyviewerlib.actions;
-
-import com.android.ddmuilib.ImageLoader;
-import com.android.hierarchyviewerlib.HierarchyViewerDirector;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-
-public class RefreshPixelPerfectTreeAction extends PixelPerfectEnabledAction implements ImageAction {
-
- private static RefreshPixelPerfectTreeAction sAction;
-
- private Image mImage;
-
- private RefreshPixelPerfectTreeAction() {
- super("Refresh &Tree");
- setAccelerator(SWT.MOD1 + 'T');
- ImageLoader imageLoader = ImageLoader.getLoader(HierarchyViewerDirector.class);
- mImage = imageLoader.loadImage("load-view-hierarchy.png", Display.getDefault()); //$NON-NLS-1$
- setImageDescriptor(ImageDescriptor.createFromImage(mImage));
- setToolTipText("Refresh the tree");
- }
-
- public static RefreshPixelPerfectTreeAction getAction() {
- if (sAction == null) {
- sAction = new RefreshPixelPerfectTreeAction();
- }
- return sAction;
- }
-
- @Override
- public void run() {
- HierarchyViewerDirector.getDirector().refreshPixelPerfectTree();
- }
-
- @Override
- public Image getImage() {
- return mImage;
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/RefreshViewAction.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/RefreshViewAction.java
deleted file mode 100644
index 01c2527..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/RefreshViewAction.java
+++ /dev/null
@@ -1,58 +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.hierarchyviewerlib.actions;
-
-import com.android.ddmuilib.ImageLoader;
-import com.android.hierarchyviewerlib.HierarchyViewerDirector;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-
-public class RefreshViewAction extends TreeViewEnabledAction implements ImageAction {
-
- private static RefreshViewAction sAction;
-
- private Image mImage;
-
- private RefreshViewAction() {
- super("Load View &Hierarchy");
- setAccelerator(SWT.MOD1 + 'H');
- ImageLoader imageLoader = ImageLoader.getLoader(HierarchyViewerDirector.class);
- mImage = imageLoader.loadImage("load-view-hierarchy.png", Display.getDefault()); //$NON-NLS-1$
- setImageDescriptor(ImageDescriptor.createFromImage(mImage));
- setToolTipText("Reload the view hierarchy");
- }
-
- public static RefreshViewAction getAction() {
- if (sAction == null) {
- sAction = new RefreshViewAction();
- }
- return sAction;
- }
-
- @Override
- public void run() {
- HierarchyViewerDirector.getDirector().reloadViewHierarchy();
- }
-
- @Override
- public Image getImage() {
- return mImage;
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/RefreshWindowsAction.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/RefreshWindowsAction.java
deleted file mode 100644
index 561f4ea..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/RefreshWindowsAction.java
+++ /dev/null
@@ -1,59 +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.hierarchyviewerlib.actions;
-
-import com.android.ddmuilib.ImageLoader;
-import com.android.hierarchyviewerlib.HierarchyViewerDirector;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-
-public class RefreshWindowsAction extends Action implements ImageAction {
-
- private static RefreshWindowsAction sAction;
-
- private Image mImage;
-
- private RefreshWindowsAction() {
- super("&Refresh");
- setAccelerator(SWT.F5);
- ImageLoader imageLoader = ImageLoader.getLoader(HierarchyViewerDirector.class);
- mImage = imageLoader.loadImage("refresh-windows.png", Display.getDefault()); //$NON-NLS-1$
- setImageDescriptor(ImageDescriptor.createFromImage(mImage));
- setToolTipText("Refresh the list of devices");
- }
-
- public static RefreshWindowsAction getAction() {
- if (sAction == null) {
- sAction = new RefreshWindowsAction();
- }
- return sAction;
- }
-
- @Override
- public void run() {
- HierarchyViewerDirector.getDirector().refreshWindows();
- }
-
- @Override
- public Image getImage() {
- return mImage;
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/RequestLayoutAction.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/RequestLayoutAction.java
deleted file mode 100644
index 6fc7867..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/RequestLayoutAction.java
+++ /dev/null
@@ -1,58 +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.hierarchyviewerlib.actions;
-
-import com.android.ddmuilib.ImageLoader;
-import com.android.hierarchyviewerlib.HierarchyViewerDirector;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-
-public class RequestLayoutAction extends SelectedNodeEnabledAction implements ImageAction {
-
- private static RequestLayoutAction sAction;
-
- private Image mImage;
-
- private RequestLayoutAction() {
- super("Request &Layout");
- setAccelerator(SWT.MOD1 + 'L');
- ImageLoader imageLoader = ImageLoader.getLoader(HierarchyViewerDirector.class);
- mImage = imageLoader.loadImage("request-layout.png", Display.getDefault()); //$NON-NLS-1$
- setImageDescriptor(ImageDescriptor.createFromImage(mImage));
- setToolTipText("Request the view to lay out");
- }
-
- public static RequestLayoutAction getAction() {
- if (sAction == null) {
- sAction = new RequestLayoutAction();
- }
- return sAction;
- }
-
- @Override
- public void run() {
- HierarchyViewerDirector.getDirector().relayoutCurrentNode();
- }
-
- @Override
- public Image getImage() {
- return mImage;
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/SavePixelPerfectAction.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/SavePixelPerfectAction.java
deleted file mode 100644
index 57e0094..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/SavePixelPerfectAction.java
+++ /dev/null
@@ -1,62 +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.hierarchyviewerlib.actions;
-
-import com.android.ddmuilib.ImageLoader;
-import com.android.hierarchyviewerlib.HierarchyViewerDirector;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-
-public class SavePixelPerfectAction extends PixelPerfectEnabledAction implements ImageAction {
-
- private static SavePixelPerfectAction sAction;
-
- private Image mImage;
-
- private Shell mShell;
-
- private SavePixelPerfectAction(Shell shell) {
- super("&Save as PNG");
- this.mShell = shell;
- setAccelerator(SWT.MOD1 + 'S');
- ImageLoader imageLoader = ImageLoader.getLoader(HierarchyViewerDirector.class);
- mImage = imageLoader.loadImage("save.png", Display.getDefault()); //$NON-NLS-1$
- setImageDescriptor(ImageDescriptor.createFromImage(mImage));
- setToolTipText("Save the screenshot as a PNG image");
- }
-
- public static SavePixelPerfectAction getAction(Shell shell) {
- if (sAction == null) {
- sAction = new SavePixelPerfectAction(shell);
- }
- return sAction;
- }
-
- @Override
- public void run() {
- HierarchyViewerDirector.getDirector().savePixelPerfect(mShell);
- }
-
- @Override
- public Image getImage() {
- return mImage;
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/SaveTreeViewAction.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/SaveTreeViewAction.java
deleted file mode 100644
index 9e11919..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/SaveTreeViewAction.java
+++ /dev/null
@@ -1,62 +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.hierarchyviewerlib.actions;
-
-import com.android.ddmuilib.ImageLoader;
-import com.android.hierarchyviewerlib.HierarchyViewerDirector;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-
-public class SaveTreeViewAction extends TreeViewEnabledAction implements ImageAction {
-
- private static SaveTreeViewAction sAction;
-
- private Image mImage;
-
- private Shell mShell;
-
- private SaveTreeViewAction(Shell shell) {
- super("&Save as PNG");
- this.mShell = shell;
- setAccelerator(SWT.MOD1 + 'S');
- ImageLoader imageLoader = ImageLoader.getLoader(HierarchyViewerDirector.class);
- mImage = imageLoader.loadImage("save.png", Display.getDefault()); //$NON-NLS-1$
- setImageDescriptor(ImageDescriptor.createFromImage(mImage));
- setToolTipText("Save the tree view as a PNG image");
- }
-
- public static SaveTreeViewAction getAction(Shell shell) {
- if (sAction == null) {
- sAction = new SaveTreeViewAction(shell);
- }
- return sAction;
- }
-
- @Override
- public void run() {
- HierarchyViewerDirector.getDirector().saveTreeView(mShell);
- }
-
- @Override
- public Image getImage() {
- return mImage;
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/SelectedNodeEnabledAction.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/SelectedNodeEnabledAction.java
deleted file mode 100644
index eee28b9..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/SelectedNodeEnabledAction.java
+++ /dev/null
@@ -1,62 +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.hierarchyviewerlib.actions;
-
-import com.android.hierarchyviewerlib.models.TreeViewModel;
-import com.android.hierarchyviewerlib.models.TreeViewModel.ITreeChangeListener;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.swt.widgets.Display;
-
-public class SelectedNodeEnabledAction extends Action implements ITreeChangeListener {
- public SelectedNodeEnabledAction(String name) {
- super(name);
- setEnabled(TreeViewModel.getModel().getTree() != null
- && TreeViewModel.getModel().getSelection() != null);
- TreeViewModel.getModel().addTreeChangeListener(this);
- }
-
- @Override
- public void selectionChanged() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- setEnabled(TreeViewModel.getModel().getTree() != null
- && TreeViewModel.getModel().getSelection() != null);
- }
- });
- }
-
- @Override
- public void treeChanged() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- setEnabled(TreeViewModel.getModel().getTree() != null
- && TreeViewModel.getModel().getSelection() != null);
- }
- });
- }
-
- @Override
- public void viewportChanged() {
- }
-
- @Override
- public void zoomChanged() {
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/TreeViewEnabledAction.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/TreeViewEnabledAction.java
deleted file mode 100644
index 4b9c02c..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/actions/TreeViewEnabledAction.java
+++ /dev/null
@@ -1,54 +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.hierarchyviewerlib.actions;
-
-import com.android.hierarchyviewerlib.models.TreeViewModel;
-import com.android.hierarchyviewerlib.models.TreeViewModel.ITreeChangeListener;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.swt.widgets.Display;
-
-public class TreeViewEnabledAction extends Action implements ITreeChangeListener {
- public TreeViewEnabledAction(String name) {
- super(name);
- setEnabled(TreeViewModel.getModel().getTree() != null);
- TreeViewModel.getModel().addTreeChangeListener(this);
- }
-
- @Override
- public void selectionChanged() {
- // pass
- }
-
- @Override
- public void treeChanged() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- setEnabled(TreeViewModel.getModel().getTree() != null);
- }
- });
- }
-
- @Override
- public void viewportChanged() {
- }
-
- @Override
- public void zoomChanged() {
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/DeviceBridge.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/DeviceBridge.java
deleted file mode 100644
index 10308a3..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/DeviceBridge.java
+++ /dev/null
@@ -1,668 +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.hierarchyviewerlib.device;
-
-import com.android.ddmlib.AdbCommandRejectedException;
-import com.android.ddmlib.AndroidDebugBridge;
-import com.android.ddmlib.IDevice;
-import com.android.ddmlib.Log;
-import com.android.ddmlib.MultiLineReceiver;
-import com.android.ddmlib.ShellCommandUnresponsiveException;
-import com.android.ddmlib.TimeoutException;
-import com.android.hierarchyviewerlib.ui.util.PsdFile;
-
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-
-import java.awt.Graphics2D;
-import java.awt.Point;
-import java.awt.image.BufferedImage;
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.DataInputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.imageio.ImageIO;
-
-/**
- * A bridge to the device.
- */
-public class DeviceBridge {
-
- public static final String TAG = "hierarchyviewer";
-
- private static final int DEFAULT_SERVER_PORT = 4939;
-
- // These codes must match the auto-generated codes in IWindowManager.java
- // See IWindowManager.aidl as well
- private static final int SERVICE_CODE_START_SERVER = 1;
-
- private static final int SERVICE_CODE_STOP_SERVER = 2;
-
- private static final int SERVICE_CODE_IS_SERVER_RUNNING = 3;
-
- private static AndroidDebugBridge sBridge;
-
- private static final HashMap<IDevice, Integer> sDevicePortMap = new HashMap<IDevice, Integer>();
-
- private static final HashMap<IDevice, ViewServerInfo> sViewServerInfo =
- new HashMap<IDevice, ViewServerInfo>();
-
- private static int sNextLocalPort = DEFAULT_SERVER_PORT;
-
- public static class ViewServerInfo {
- public final int protocolVersion;
-
- public final int serverVersion;
-
- ViewServerInfo(int serverVersion, int protocolVersion) {
- this.protocolVersion = protocolVersion;
- this.serverVersion = serverVersion;
- }
- }
-
- /**
- * Init the DeviceBridge with an existing {@link AndroidDebugBridge}.
- * @param bridge the bridge object to use
- */
- public static void acquireBridge(AndroidDebugBridge bridge) {
- sBridge = bridge;
- }
-
- /**
- * Creates an {@link AndroidDebugBridge} connected to adb at the given location.
- *
- * If a bridge is already running, this disconnects it and creates a new one.
- *
- * @param adbLocation the location to adb.
- */
- public static void initDebugBridge(String adbLocation) {
- if (sBridge == null) {
- AndroidDebugBridge.init(false /* debugger support */);
- }
- if (sBridge == null || !sBridge.isConnected()) {
- sBridge = AndroidDebugBridge.createBridge(adbLocation, true);
- }
- }
-
- /** Disconnects the current {@link AndroidDebugBridge}. */
- public static void terminate() {
- AndroidDebugBridge.terminate();
- }
-
- public static IDevice[] getDevices() {
- if (sBridge == null) {
- return new IDevice[0];
- }
- return sBridge.getDevices();
- }
-
- /*
- * This adds a listener to the debug bridge. The listener is notified of
- * connecting/disconnecting devices, devices coming online, etc.
- */
- public static void startListenForDevices(AndroidDebugBridge.IDeviceChangeListener listener) {
- AndroidDebugBridge.addDeviceChangeListener(listener);
- }
-
- public static void stopListenForDevices(AndroidDebugBridge.IDeviceChangeListener listener) {
- AndroidDebugBridge.removeDeviceChangeListener(listener);
- }
-
- /**
- * Sets up a just-connected device to work with the view server.
- * <p/>
- * This starts a port forwarding between a local port and a port on the
- * device.
- *
- * @param device
- */
- public static void setupDeviceForward(IDevice device) {
- synchronized (sDevicePortMap) {
- if (device.getState() == IDevice.DeviceState.ONLINE) {
- int localPort = sNextLocalPort++;
- try {
- device.createForward(localPort, DEFAULT_SERVER_PORT);
- sDevicePortMap.put(device, localPort);
- } catch (TimeoutException e) {
- Log.e(TAG, "Timeout setting up port forwarding for " + device);
- } catch (AdbCommandRejectedException e) {
- Log.e(TAG, String.format("Adb rejected forward command for device %1$s: %2$s",
- device, e.getMessage()));
- } catch (IOException e) {
- Log.e(TAG, String.format("Failed to create forward for device %1$s: %2$s",
- device, e.getMessage()));
- }
- }
- }
- }
-
- public static void removeDeviceForward(IDevice device) {
- synchronized (sDevicePortMap) {
- final Integer localPort = sDevicePortMap.get(device);
- if (localPort != null) {
- try {
- device.removeForward(localPort, DEFAULT_SERVER_PORT);
- sDevicePortMap.remove(device);
- } catch (TimeoutException e) {
- Log.e(TAG, "Timeout removing port forwarding for " + device);
- } catch (AdbCommandRejectedException e) {
- // In this case, we want to fail silently.
- } catch (IOException e) {
- Log.e(TAG, String.format("Failed to remove forward for device %1$s: %2$s",
- device, e.getMessage()));
- }
- }
- }
- }
-
- public static int getDeviceLocalPort(IDevice device) {
- synchronized (sDevicePortMap) {
- Integer port = sDevicePortMap.get(device);
- if (port != null) {
- return port;
- }
-
- Log.e(TAG, "Missing forwarded port for " + device.getSerialNumber());
- return -1;
- }
-
- }
-
- public static boolean isViewServerRunning(IDevice device) {
- final boolean[] result = new boolean[1];
- try {
- if (device.isOnline()) {
- device.executeShellCommand(buildIsServerRunningShellCommand(),
- new BooleanResultReader(result));
- if (!result[0]) {
- ViewServerInfo serverInfo = loadViewServerInfo(device);
- if (serverInfo != null && serverInfo.protocolVersion > 2) {
- result[0] = true;
- }
- }
- }
- } catch (TimeoutException e) {
- Log.e(TAG, "Timeout checking status of view server on device " + device);
- } catch (IOException e) {
- Log.e(TAG, "Unable to check status of view server on device " + device);
- } catch (AdbCommandRejectedException e) {
- Log.e(TAG, "Adb rejected command to check status of view server on device " + device);
- } catch (ShellCommandUnresponsiveException e) {
- Log.e(TAG, "Unable to execute command to check status of view server on device "
- + device);
- }
- return result[0];
- }
-
- public static boolean startViewServer(IDevice device) {
- return startViewServer(device, DEFAULT_SERVER_PORT);
- }
-
- public static boolean startViewServer(IDevice device, int port) {
- final boolean[] result = new boolean[1];
- try {
- if (device.isOnline()) {
- device.executeShellCommand(buildStartServerShellCommand(port),
- new BooleanResultReader(result));
- }
- } catch (TimeoutException e) {
- Log.e(TAG, "Timeout starting view server on device " + device);
- } catch (IOException e) {
- Log.e(TAG, "Unable to start view server on device " + device);
- } catch (AdbCommandRejectedException e) {
- Log.e(TAG, "Adb rejected command to start view server on device " + device);
- } catch (ShellCommandUnresponsiveException e) {
- Log.e(TAG, "Unable to execute command to start view server on device " + device);
- }
- return result[0];
- }
-
- public static boolean stopViewServer(IDevice device) {
- final boolean[] result = new boolean[1];
- try {
- if (device.isOnline()) {
- device.executeShellCommand(buildStopServerShellCommand(), new BooleanResultReader(
- result));
- }
- } catch (TimeoutException e) {
- Log.e(TAG, "Timeout stopping view server on device " + device);
- } catch (IOException e) {
- Log.e(TAG, "Unable to stop view server on device " + device);
- } catch (AdbCommandRejectedException e) {
- Log.e(TAG, "Adb rejected command to stop view server on device " + device);
- } catch (ShellCommandUnresponsiveException e) {
- Log.e(TAG, "Unable to execute command to stop view server on device " + device);
- }
- return result[0];
- }
-
- private static String buildStartServerShellCommand(int port) {
- return String.format("service call window %d i32 %d", SERVICE_CODE_START_SERVER, port); //$NON-NLS-1$
- }
-
- private static String buildStopServerShellCommand() {
- return String.format("service call window %d", SERVICE_CODE_STOP_SERVER); //$NON-NLS-1$
- }
-
- private static String buildIsServerRunningShellCommand() {
- return String.format("service call window %d", SERVICE_CODE_IS_SERVER_RUNNING); //$NON-NLS-1$
- }
-
- private static class BooleanResultReader extends MultiLineReceiver {
- private final boolean[] mResult;
-
- public BooleanResultReader(boolean[] result) {
- mResult = result;
- }
-
- @Override
- public void processNewLines(String[] strings) {
- if (strings.length > 0) {
- Pattern pattern = Pattern.compile(".*?\\([0-9]{8} ([0-9]{8}).*"); //$NON-NLS-1$
- Matcher matcher = pattern.matcher(strings[0]);
- if (matcher.matches()) {
- if (Integer.parseInt(matcher.group(1)) == 1) {
- mResult[0] = true;
- }
- }
- }
- }
-
- @Override
- public boolean isCancelled() {
- return false;
- }
- }
-
- public static ViewServerInfo loadViewServerInfo(IDevice device) {
- int server = -1;
- int protocol = -1;
- DeviceConnection connection = null;
- try {
- connection = new DeviceConnection(device);
- connection.sendCommand("SERVER"); //$NON-NLS-1$
- String line = connection.getInputStream().readLine();
- if (line != null) {
- server = Integer.parseInt(line);
- }
- } catch (Exception e) {
- Log.e(TAG, "Unable to get view server version from device " + device);
- } finally {
- if (connection != null) {
- connection.close();
- }
- }
- connection = null;
- try {
- connection = new DeviceConnection(device);
- connection.sendCommand("PROTOCOL"); //$NON-NLS-1$
- String line = connection.getInputStream().readLine();
- if (line != null) {
- protocol = Integer.parseInt(line);
- }
- } catch (Exception e) {
- Log.e(TAG, "Unable to get view server protocol version from device " + device);
- } finally {
- if (connection != null) {
- connection.close();
- }
- }
- if (server == -1 || protocol == -1) {
- return null;
- }
- ViewServerInfo returnValue = new ViewServerInfo(server, protocol);
- synchronized (sViewServerInfo) {
- sViewServerInfo.put(device, returnValue);
- }
- return returnValue;
- }
-
- public static ViewServerInfo getViewServerInfo(IDevice device) {
- synchronized (sViewServerInfo) {
- return sViewServerInfo.get(device);
- }
- }
-
- public static void removeViewServerInfo(IDevice device) {
- synchronized (sViewServerInfo) {
- sViewServerInfo.remove(device);
- }
- }
-
- /*
- * This loads the list of windows from the specified device. The format is:
- * hashCode1 title1 hashCode2 title2 ... hashCodeN titleN DONE.
- */
- public static Window[] loadWindows(IDevice device) {
- ArrayList<Window> windows = new ArrayList<Window>();
- DeviceConnection connection = null;
- ViewServerInfo serverInfo = getViewServerInfo(device);
- try {
- connection = new DeviceConnection(device);
- connection.sendCommand("LIST"); //$NON-NLS-1$
- BufferedReader in = connection.getInputStream();
- String line;
- while ((line = in.readLine()) != null) {
- if ("DONE.".equalsIgnoreCase(line)) { //$NON-NLS-1$
- break;
- }
-
- int index = line.indexOf(' ');
- if (index != -1) {
- String windowId = line.substring(0, index);
-
- int id;
- if (serverInfo.serverVersion > 2) {
- id = (int) Long.parseLong(windowId, 16);
- } else {
- id = Integer.parseInt(windowId, 16);
- }
-
- Window w = new Window(device, line.substring(index + 1), id);
- windows.add(w);
- }
- }
- // Automatic refreshing of windows was added in protocol version 3.
- // Before, the user needed to specify explicitly that he wants to
- // get the focused window, which was done using a special type of
- // window with hash code -1.
- if (serverInfo.protocolVersion < 3) {
- windows.add(Window.getFocusedWindow(device));
- }
- } catch (Exception e) {
- Log.e(TAG, "Unable to load the window list from device " + device);
- } finally {
- if (connection != null) {
- connection.close();
- }
- }
- // The server returns the list of windows from the window at the bottom
- // to the top. We want the reverse order to put the top window on top of
- // the list.
- Window[] returnValue = new Window[windows.size()];
- for (int i = windows.size() - 1; i >= 0; i--) {
- returnValue[returnValue.length - i - 1] = windows.get(i);
- }
- return returnValue;
- }
-
- /*
- * This gets the hash code of the window that has focus. Only works with
- * protocol version 3 and above.
- */
- public static int getFocusedWindow(IDevice device) {
- DeviceConnection connection = null;
- try {
- connection = new DeviceConnection(device);
- connection.sendCommand("GET_FOCUS"); //$NON-NLS-1$
- String line = connection.getInputStream().readLine();
- if (line == null || line.length() == 0) {
- return -1;
- }
- return (int) Long.parseLong(line.substring(0, line.indexOf(' ')), 16);
- } catch (Exception e) {
- Log.e(TAG, "Unable to get the focused window from device " + device);
- } finally {
- if (connection != null) {
- connection.close();
- }
- }
- return -1;
- }
-
- public static ViewNode loadWindowData(Window window) {
- DeviceConnection connection = null;
- try {
- connection = new DeviceConnection(window.getDevice());
- connection.sendCommand("DUMP " + window.encode()); //$NON-NLS-1$
- BufferedReader in = connection.getInputStream();
- ViewNode currentNode = null;
- int currentDepth = -1;
- String line;
- while ((line = in.readLine()) != null) {
- if ("DONE.".equalsIgnoreCase(line)) {
- break;
- }
- int depth = 0;
- while (line.charAt(depth) == ' ') {
- depth++;
- }
- while (depth <= currentDepth) {
- currentNode = currentNode.parent;
- currentDepth--;
- }
- currentNode = new ViewNode(window, currentNode, line.substring(depth));
- currentDepth = depth;
- }
- if (currentNode == null) {
- return null;
- }
- while (currentNode.parent != null) {
- currentNode = currentNode.parent;
- }
- ViewServerInfo serverInfo = getViewServerInfo(window.getDevice());
- if (serverInfo != null) {
- currentNode.protocolVersion = serverInfo.protocolVersion;
- }
- return currentNode;
- } catch (Exception e) {
- Log.e(TAG, "Unable to load window data for window " + window.getTitle() + " on device "
- + window.getDevice());
- Log.e(TAG, e.getMessage());
- } finally {
- if (connection != null) {
- connection.close();
- }
- }
- return null;
- }
-
- public static boolean loadProfileData(Window window, ViewNode viewNode) {
- DeviceConnection connection = null;
- try {
- connection = new DeviceConnection(window.getDevice());
- connection.sendCommand("PROFILE " + window.encode() + " " + viewNode.toString()); //$NON-NLS-1$
- BufferedReader in = connection.getInputStream();
- int protocol;
- synchronized (sViewServerInfo) {
- protocol = sViewServerInfo.get(window.getDevice()).protocolVersion;
- }
- if (protocol < 3) {
- return loadProfileData(viewNode, in);
- } else {
- boolean ret = loadProfileDataRecursive(viewNode, in);
- if (ret) {
- viewNode.setProfileRatings();
- }
- return ret;
- }
- } catch (Exception e) {
- Log.e(TAG, "Unable to load profiling data for window " + window.getTitle()
- + " on device " + window.getDevice());
- } finally {
- if (connection != null) {
- connection.close();
- }
- }
- return false;
- }
-
- private static boolean loadProfileData(ViewNode node, BufferedReader in) throws IOException {
- String line;
- if ((line = in.readLine()) == null || line.equalsIgnoreCase("-1 -1 -1") //$NON-NLS-1$
- || line.equalsIgnoreCase("DONE.")) { //$NON-NLS-1$
- return false;
- }
- String[] data = line.split(" ");
- node.measureTime = (Long.parseLong(data[0]) / 1000.0) / 1000.0;
- node.layoutTime = (Long.parseLong(data[1]) / 1000.0) / 1000.0;
- node.drawTime = (Long.parseLong(data[2]) / 1000.0) / 1000.0;
- return true;
- }
-
- private static boolean loadProfileDataRecursive(ViewNode node, BufferedReader in)
- throws IOException {
- if (!loadProfileData(node, in)) {
- return false;
- }
- for (int i = 0; i < node.children.size(); i++) {
- if (!loadProfileDataRecursive(node.children.get(i), in)) {
- return false;
- }
- }
- return true;
- }
-
- public static Image loadCapture(Window window, ViewNode viewNode) {
- DeviceConnection connection = null;
- try {
- connection = new DeviceConnection(window.getDevice());
- connection.getSocket().setSoTimeout(5000);
- connection.sendCommand("CAPTURE " + window.encode() + " " + viewNode.toString()); //$NON-NLS-1$
- return new Image(Display.getDefault(), connection.getSocket().getInputStream());
- } catch (Exception e) {
- Log.e(TAG, "Unable to capture data for node " + viewNode + " in window "
- + window.getTitle() + " on device " + window.getDevice());
- } finally {
- if (connection != null) {
- connection.close();
- }
- }
- return null;
- }
-
- public static PsdFile captureLayers(Window window) {
- DeviceConnection connection = null;
- DataInputStream in = null;
-
- try {
- connection = new DeviceConnection(window.getDevice());
-
- connection.sendCommand("CAPTURE_LAYERS " + window.encode()); //$NON-NLS-1$
-
- in =
- new DataInputStream(new BufferedInputStream(connection.getSocket()
- .getInputStream()));
-
- int width = in.readInt();
- int height = in.readInt();
-
- PsdFile psd = new PsdFile(width, height);
-
- while (readLayer(in, psd)) {
- }
-
- return psd;
- } catch (Exception e) {
- Log.e(TAG, "Unable to capture layers for window " + window.getTitle() + " on device "
- + window.getDevice());
- } finally {
- if (in != null) {
- try {
- in.close();
- } catch (Exception ex) {
- }
- }
- connection.close();
- }
-
- return null;
- }
-
- private static boolean readLayer(DataInputStream in, PsdFile psd) {
- try {
- if (in.read() == 2) {
- return false;
- }
- String name = in.readUTF();
- boolean visible = in.read() == 1;
- int x = in.readInt();
- int y = in.readInt();
- int dataSize = in.readInt();
-
- byte[] data = new byte[dataSize];
- int read = 0;
- while (read < dataSize) {
- read += in.read(data, read, dataSize - read);
- }
-
- ByteArrayInputStream arrayIn = new ByteArrayInputStream(data);
- BufferedImage chunk = ImageIO.read(arrayIn);
-
- // Ensure the image is in the right format
- BufferedImage image =
- new BufferedImage(chunk.getWidth(), chunk.getHeight(),
- BufferedImage.TYPE_INT_ARGB);
- Graphics2D g = image.createGraphics();
- g.drawImage(chunk, null, 0, 0);
- g.dispose();
-
- psd.addLayer(name, image, new Point(x, y), visible);
-
- return true;
- } catch (Exception e) {
- return false;
- }
- }
-
- public static void invalidateView(ViewNode viewNode) {
- DeviceConnection connection = null;
- try {
- connection = new DeviceConnection(viewNode.window.getDevice());
- connection.sendCommand("INVALIDATE " + viewNode.window.encode() + " " + viewNode); //$NON-NLS-1$
- } catch (Exception e) {
- Log.e(TAG, "Unable to invalidate view " + viewNode + " in window " + viewNode.window
- + " on device " + viewNode.window.getDevice());
- } finally {
- connection.close();
- }
- }
-
- public static void requestLayout(ViewNode viewNode) {
- DeviceConnection connection = null;
- try {
- connection = new DeviceConnection(viewNode.window.getDevice());
- connection.sendCommand("REQUEST_LAYOUT " + viewNode.window.encode() + " " + viewNode); //$NON-NLS-1$
- } catch (Exception e) {
- Log.e(TAG, "Unable to request layout for node " + viewNode + " in window "
- + viewNode.window + " on device " + viewNode.window.getDevice());
- } finally {
- connection.close();
- }
- }
-
- public static void outputDisplayList(ViewNode viewNode) {
- DeviceConnection connection = null;
- try {
- connection = new DeviceConnection(viewNode.window.getDevice());
- connection.sendCommand("OUTPUT_DISPLAYLIST " +
- viewNode.window.encode() + " " + viewNode); //$NON-NLS-1$
- } catch (Exception e) {
- Log.e(TAG, "Unable to dump displaylist for node " + viewNode + " in window "
- + viewNode.window + " on device " + viewNode.window.getDevice());
- } finally {
- connection.close();
- }
- }
-
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/DeviceConnection.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/DeviceConnection.java
deleted file mode 100644
index f750d5c..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/DeviceConnection.java
+++ /dev/null
@@ -1,100 +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.hierarchyviewerlib.device;
-
-import com.android.ddmlib.IDevice;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.nio.channels.SocketChannel;
-
-/**
- * This class is used for connecting to a device in debug mode running the view
- * server.
- */
-public class DeviceConnection {
-
- // Now a socket channel, since socket channels are friendly with interrupts.
- private SocketChannel mSocketChannel;
-
- private BufferedReader mIn;
-
- private BufferedWriter mOut;
-
- public DeviceConnection(IDevice device) throws IOException {
- mSocketChannel = SocketChannel.open();
- int port = DeviceBridge.getDeviceLocalPort(device);
-
- if (port == -1) {
- throw new IOException();
- }
-
- mSocketChannel.connect(new InetSocketAddress("127.0.0.1", port)); //$NON-NLS-1$
- mSocketChannel.socket().setSoTimeout(40000);
- }
-
- public BufferedReader getInputStream() throws IOException {
- if (mIn == null) {
- mIn = new BufferedReader(new InputStreamReader(mSocketChannel.socket().getInputStream()));
- }
- return mIn;
- }
-
- public BufferedWriter getOutputStream() throws IOException {
- if (mOut == null) {
- mOut =
- new BufferedWriter(new OutputStreamWriter(mSocketChannel.socket()
- .getOutputStream()));
- }
- return mOut;
- }
-
- public Socket getSocket() {
- return mSocketChannel.socket();
- }
-
- public void sendCommand(String command) throws IOException {
- BufferedWriter out = getOutputStream();
- out.write(command);
- out.newLine();
- out.flush();
- }
-
- public void close() {
- try {
- if (mIn != null) {
- mIn.close();
- }
- } catch (IOException e) {
- }
- try {
- if (mOut != null) {
- mOut.close();
- }
- } catch (IOException e) {
- }
- try {
- mSocketChannel.close();
- } catch (IOException e) {
- }
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/ViewNode.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/ViewNode.java
deleted file mode 100644
index 4ab4fc6..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/ViewNode.java
+++ /dev/null
@@ -1,362 +0,0 @@
-/*
- * Copyright (C) 2008 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.device;
-
-import org.eclipse.swt.graphics.Image;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-
-public class ViewNode {
-
- public static enum ProfileRating {
- RED, YELLOW, GREEN, NONE
- };
-
- private static final double RED_THRESHOLD = 0.8;
-
- private static final double YELLOW_THRESHOLD = 0.5;
-
- public static final String MISCELLANIOUS = "miscellaneous";
-
- public String id;
-
- public String name;
-
- public String hashCode;
-
- public List<Property> properties = new ArrayList<Property>();
-
- public Map<String, Property> namedProperties = new HashMap<String, Property>();
-
- public ViewNode parent;
-
- public List<ViewNode> children = new ArrayList<ViewNode>();
-
- public int left;
-
- public int top;
-
- public int width;
-
- public int height;
-
- public int scrollX;
-
- public int scrollY;
-
- public int paddingLeft;
-
- public int paddingRight;
-
- public int paddingTop;
-
- public int paddingBottom;
-
- public int marginLeft;
-
- public int marginRight;
-
- public int marginTop;
-
- public int marginBottom;
-
- public int baseline;
-
- public boolean willNotDraw;
-
- public boolean hasMargins;
-
- public boolean hasFocus;
-
- public int index;
-
- public double measureTime;
-
- public double layoutTime;
-
- public double drawTime;
-
- public ProfileRating measureRating = ProfileRating.NONE;
-
- public ProfileRating layoutRating = ProfileRating.NONE;
-
- public ProfileRating drawRating = ProfileRating.NONE;
-
- public Set<String> categories = new TreeSet<String>();
-
- public Window window;
-
- public Image image;
-
- public int imageReferences = 1;
-
- public int viewCount;
-
- public boolean filtered;
-
- public int protocolVersion;
-
- public ViewNode(Window window, ViewNode parent, String data) {
- this.window = window;
- this.parent = parent;
- index = this.parent == null ? 0 : this.parent.children.size();
- if (this.parent != null) {
- this.parent.children.add(this);
- }
- int delimIndex = data.indexOf('@');
- if (delimIndex < 0) {
- throw new IllegalArgumentException("Invalid format for ViewNode, missing @: " + data);
- }
- name = data.substring(0, delimIndex);
- data = data.substring(delimIndex + 1);
- delimIndex = data.indexOf(' ');
- hashCode = data.substring(0, delimIndex);
- loadProperties(data.substring(delimIndex + 1).trim());
-
- measureTime = -1;
- layoutTime = -1;
- drawTime = -1;
- }
-
- public void dispose() {
- final int N = children.size();
- for (int i = 0; i < N; i++) {
- children.get(i).dispose();
- }
- dereferenceImage();
- }
-
- public void referenceImage() {
- imageReferences++;
- }
-
- public void dereferenceImage() {
- imageReferences--;
- if (image != null && imageReferences == 0) {
- image.dispose();
- }
- }
-
- private void loadProperties(String data) {
- int start = 0;
- boolean stop;
- do {
- int index = data.indexOf('=', start);
- ViewNode.Property property = new ViewNode.Property();
- property.name = data.substring(start, index);
-
- int index2 = data.indexOf(',', index + 1);
- int length = Integer.parseInt(data.substring(index + 1, index2));
- start = index2 + 1 + length;
- property.value = data.substring(index2 + 1, index2 + 1 + length);
-
- properties.add(property);
- namedProperties.put(property.name, property);
-
- stop = start >= data.length();
- if (!stop) {
- start += 1;
- }
- } while (!stop);
-
- Collections.sort(properties, new Comparator<ViewNode.Property>() {
- @Override
- public int compare(ViewNode.Property source, ViewNode.Property destination) {
- return source.name.compareTo(destination.name);
- }
- });
-
- id = namedProperties.get("mID").value; //$NON-NLS-1$
-
- left =
- namedProperties.containsKey("mLeft") ? getInt("mLeft", 0) : getInt("layout:mLeft", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- 0);
- top = namedProperties.containsKey("mTop") ? getInt("mTop", 0) : getInt("layout:mTop", 0); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- width =
- namedProperties.containsKey("getWidth()") ? getInt("getWidth()", 0) : getInt( //$NON-NLS-1$ //$NON-NLS-2$
- "layout:getWidth()", 0); //$NON-NLS-1$
- height =
- namedProperties.containsKey("getHeight()") ? getInt("getHeight()", 0) : getInt( //$NON-NLS-1$ //$NON-NLS-2$
- "layout:getHeight()", 0); //$NON-NLS-1$
- scrollX =
- namedProperties.containsKey("mScrollX") ? getInt("mScrollX", 0) : getInt( //$NON-NLS-1$ //$NON-NLS-2$
- "scrolling:mScrollX", 0); //$NON-NLS-1$
- scrollY =
- namedProperties.containsKey("mScrollY") ? getInt("mScrollY", 0) : getInt( //$NON-NLS-1$ //$NON-NLS-2$
- "scrolling:mScrollY", 0); //$NON-NLS-1$
- paddingLeft =
- namedProperties.containsKey("mPaddingLeft") ? getInt("mPaddingLeft", 0) : getInt( //$NON-NLS-1$ //$NON-NLS-2$
- "padding:mPaddingLeft", 0); //$NON-NLS-1$
- paddingRight =
- namedProperties.containsKey("mPaddingRight") ? getInt("mPaddingRight", 0) : getInt( //$NON-NLS-1$ //$NON-NLS-2$
- "padding:mPaddingRight", 0); //$NON-NLS-1$
- paddingTop =
- namedProperties.containsKey("mPaddingTop") ? getInt("mPaddingTop", 0) : getInt( //$NON-NLS-1$ //$NON-NLS-2$
- "padding:mPaddingTop", 0); //$NON-NLS-1$
- paddingBottom =
- namedProperties.containsKey("mPaddingBottom") ? getInt("mPaddingBottom", 0) //$NON-NLS-1$ //$NON-NLS-2$
- : getInt("padding:mPaddingBottom", 0); //$NON-NLS-1$
- marginLeft =
- namedProperties.containsKey("layout_leftMargin") ? getInt("layout_leftMargin", //$NON-NLS-1$ //$NON-NLS-2$
- Integer.MIN_VALUE) : getInt("layout:layout_leftMargin", Integer.MIN_VALUE); //$NON-NLS-1$
- marginRight =
- namedProperties.containsKey("layout_rightMargin") ? getInt("layout_rightMargin", //$NON-NLS-1$ //$NON-NLS-2$
- Integer.MIN_VALUE) : getInt("layout:layout_rightMargin", Integer.MIN_VALUE); //$NON-NLS-1$
- marginTop =
- namedProperties.containsKey("layout_topMargin") ? getInt("layout_topMargin", //$NON-NLS-1$ //$NON-NLS-2$
- Integer.MIN_VALUE) : getInt("layout:layout_topMargin", Integer.MIN_VALUE); //$NON-NLS-1$
- marginBottom =
- namedProperties.containsKey("layout_bottomMargin") ? getInt("layout_bottomMargin", //$NON-NLS-1$ //$NON-NLS-2$
- Integer.MIN_VALUE)
- : getInt("layout:layout_bottomMargin", Integer.MIN_VALUE); //$NON-NLS-1$
- baseline =
- namedProperties.containsKey("getBaseline()") ? getInt("getBaseline()", 0) : getInt( //$NON-NLS-1$ //$NON-NLS-2$
- "layout:getBaseline()", 0); //$NON-NLS-1$
- willNotDraw =
- namedProperties.containsKey("willNotDraw()") ? getBoolean("willNotDraw()", false) //$NON-NLS-1$ //$NON-NLS-2$
- : getBoolean("drawing:willNotDraw()", false); //$NON-NLS-1$
- hasFocus =
- namedProperties.containsKey("hasFocus()") ? getBoolean("hasFocus()", false) //$NON-NLS-1$ //$NON-NLS-2$
- : getBoolean("focus:hasFocus()", false); //$NON-NLS-1$
-
- hasMargins =
- marginLeft != Integer.MIN_VALUE && marginRight != Integer.MIN_VALUE
- && marginTop != Integer.MIN_VALUE && marginBottom != Integer.MIN_VALUE;
-
- for (String name : namedProperties.keySet()) {
- int index = name.indexOf(':');
- if (index != -1) {
- categories.add(name.substring(0, index));
- }
- }
- if (categories.size() != 0) {
- categories.add(MISCELLANIOUS);
- }
- }
-
- public void setProfileRatings() {
- final int N = children.size();
- if (N > 1) {
- double totalMeasure = 0;
- double totalLayout = 0;
- double totalDraw = 0;
- for (int i = 0; i < N; i++) {
- ViewNode child = children.get(i);
- totalMeasure += child.measureTime;
- totalLayout += child.layoutTime;
- totalDraw += child.drawTime;
- }
- for (int i = 0; i < N; i++) {
- ViewNode child = children.get(i);
- if (child.measureTime / totalMeasure >= RED_THRESHOLD) {
- child.measureRating = ProfileRating.RED;
- } else if (child.measureTime / totalMeasure >= YELLOW_THRESHOLD) {
- child.measureRating = ProfileRating.YELLOW;
- } else {
- child.measureRating = ProfileRating.GREEN;
- }
- if (child.layoutTime / totalLayout >= RED_THRESHOLD) {
- child.layoutRating = ProfileRating.RED;
- } else if (child.layoutTime / totalLayout >= YELLOW_THRESHOLD) {
- child.layoutRating = ProfileRating.YELLOW;
- } else {
- child.layoutRating = ProfileRating.GREEN;
- }
- if (child.drawTime / totalDraw >= RED_THRESHOLD) {
- child.drawRating = ProfileRating.RED;
- } else if (child.drawTime / totalDraw >= YELLOW_THRESHOLD) {
- child.drawRating = ProfileRating.YELLOW;
- } else {
- child.drawRating = ProfileRating.GREEN;
- }
- }
- }
- for (int i = 0; i < N; i++) {
- children.get(i).setProfileRatings();
- }
- }
-
- public void setViewCount() {
- viewCount = 1;
- final int N = children.size();
- for (int i = 0; i < N; i++) {
- ViewNode child = children.get(i);
- child.setViewCount();
- viewCount += child.viewCount;
- }
- }
-
- public void filter(String text) {
- int dotIndex = name.lastIndexOf('.');
- String shortName = (dotIndex == -1) ? name : name.substring(dotIndex + 1);
- filtered =
- !text.equals("") //$NON-NLS-1$
- && (shortName.toLowerCase().contains(text.toLowerCase()) || (!id
- .equals("NO_ID") && id.toLowerCase().contains(text.toLowerCase()))); //$NON-NLS-1$
- final int N = children.size();
- for (int i = 0; i < N; i++) {
- children.get(i).filter(text);
- }
- }
-
- private boolean getBoolean(String name, boolean defaultValue) {
- Property p = namedProperties.get(name);
- if (p != null) {
- try {
- return Boolean.parseBoolean(p.value);
- } catch (NumberFormatException e) {
- return defaultValue;
- }
- }
- return defaultValue;
- }
-
- private int getInt(String name, int defaultValue) {
- Property p = namedProperties.get(name);
- if (p != null) {
- try {
- return Integer.parseInt(p.value);
- } catch (NumberFormatException e) {
- return defaultValue;
- }
- }
- return defaultValue;
- }
-
- @Override
- public String toString() {
- return name + "@" + hashCode; //$NON-NLS-1$
- }
-
- public static class Property {
- public String name;
-
- public String value;
-
- @Override
- public String toString() {
- return name + '=' + value;
- }
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/Window.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/Window.java
deleted file mode 100644
index af79081..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/Window.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2008 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.device;
-
-import com.android.ddmlib.IDevice;
-
-/**
- * Used for storing a window from the window manager service on the device.
- * These are the windows that the device selector shows.
- */
-public class Window {
-
- private String mTitle;
-
- private int mHashCode;
-
- private IDevice mDevice;
-
- public Window(IDevice device, String title, int hashCode) {
- this.mDevice = device;
- this.mTitle = title;
- this.mHashCode = hashCode;
- }
-
- public String getTitle() {
- return mTitle;
- }
-
- public int getHashCode() {
- return mHashCode;
- }
-
- public String encode() {
- return Integer.toHexString(mHashCode);
- }
-
- @Override
- public String toString() {
- return mTitle;
- }
-
- public IDevice getDevice() {
- return mDevice;
- }
-
- public static Window getFocusedWindow(IDevice device) {
- return new Window(device, "<Focused Window>", -1);
- }
-
- /*
- * After each refresh of the windows in the device selector, the windows are
- * different instances and automatically reselecting the same window doesn't
- * work in the device selector unless the equals method is defined here.
- */
- @Override
- public boolean equals(Object other) {
- if (other instanceof Window) {
- return mHashCode == ((Window) other).mHashCode
- && mDevice.getSerialNumber().equals(((Window) other).mDevice.getSerialNumber());
- }
- return false;
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/WindowUpdater.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/WindowUpdater.java
deleted file mode 100644
index 9dbb989..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/WindowUpdater.java
+++ /dev/null
@@ -1,157 +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.hierarchyviewerlib.device;
-
-import com.android.ddmlib.IDevice;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-
-/**
- * This class handles automatic updating of the list of windows in the device
- * selector for device with protocol version 3 or above of the view server. It
- * connects to the devices, keeps the connection open and listens for messages.
- * It notifies all it's listeners of changes.
- */
-public class WindowUpdater {
- private static HashMap<IDevice, ArrayList<IWindowChangeListener>> sWindowChangeListeners =
- new HashMap<IDevice, ArrayList<IWindowChangeListener>>();
-
- private static HashMap<IDevice, Thread> sListeningThreads = new HashMap<IDevice, Thread>();
-
- public static interface IWindowChangeListener {
- public void windowsChanged(IDevice device);
-
- public void focusChanged(IDevice device);
- }
-
- public static void terminate() {
- synchronized (sListeningThreads) {
- for (IDevice device : sListeningThreads.keySet()) {
- sListeningThreads.get(device).interrupt();
-
- }
- }
- }
-
- public static void startListenForWindowChanges(IWindowChangeListener listener, IDevice device) {
- synchronized (sWindowChangeListeners) {
- // In this case, a listening thread already exists, so we don't need
- // to create another one.
- if (sWindowChangeListeners.containsKey(device)) {
- sWindowChangeListeners.get(device).add(listener);
- return;
- }
- ArrayList<IWindowChangeListener> listeners = new ArrayList<IWindowChangeListener>();
- listeners.add(listener);
- sWindowChangeListeners.put(device, listeners);
- }
- // Start listening
- Thread listeningThread = new Thread(new WindowChangeMonitor(device));
- synchronized (sListeningThreads) {
- sListeningThreads.put(device, listeningThread);
- }
- listeningThread.start();
- }
-
- public static void stopListenForWindowChanges(IWindowChangeListener listener, IDevice device) {
- synchronized (sWindowChangeListeners) {
- ArrayList<IWindowChangeListener> listeners = sWindowChangeListeners.get(device);
- listeners.remove(listener);
- // There are more listeners, so don't stop the listening thread.
- if (listeners.size() != 0) {
- return;
- }
- sWindowChangeListeners.remove(device);
- }
- // Everybody left, so the party's over!
- Thread listeningThread;
- synchronized (sListeningThreads) {
- listeningThread = sListeningThreads.get(device);
- sListeningThreads.remove(device);
- }
- listeningThread.interrupt();
- }
-
- private static IWindowChangeListener[] getWindowChangeListenersAsArray(IDevice device) {
- IWindowChangeListener[] listeners;
- synchronized (sWindowChangeListeners) {
- ArrayList<IWindowChangeListener> windowChangeListenerList =
- sWindowChangeListeners.get(device);
- if (windowChangeListenerList == null) {
- return null;
- }
- listeners =
- windowChangeListenerList
- .toArray(new IWindowChangeListener[windowChangeListenerList.size()]);
- }
- return listeners;
- }
-
- public static void notifyWindowsChanged(IDevice device) {
- IWindowChangeListener[] listeners = getWindowChangeListenersAsArray(device);
- if (listeners != null) {
- for (int i = 0; i < listeners.length; i++) {
- listeners[i].windowsChanged(device);
- }
- }
- }
-
- public static void notifyFocusChanged(IDevice device) {
- IWindowChangeListener[] listeners = getWindowChangeListenersAsArray(device);
- if (listeners != null) {
- for (int i = 0; i < listeners.length; i++) {
- listeners[i].focusChanged(device);
- }
- }
- }
-
- private static class WindowChangeMonitor implements Runnable {
- private IDevice device;
-
- public WindowChangeMonitor(IDevice device) {
- this.device = device;
- }
-
- @Override
- public void run() {
- while (!Thread.currentThread().isInterrupted()) {
- DeviceConnection connection = null;
- try {
- connection = new DeviceConnection(device);
- connection.sendCommand("AUTOLIST");
- String line;
- while (!Thread.currentThread().isInterrupted()
- && (line = connection.getInputStream().readLine()) != null) {
- if (line.equalsIgnoreCase("LIST UPDATE")) {
- notifyWindowsChanged(device);
- } else if (line.equalsIgnoreCase("FOCUS UPDATE")) {
- notifyFocusChanged(device);
- }
- }
-
- } catch (IOException e) {
- } finally {
- if (connection != null) {
- connection.close();
- }
- }
- }
- }
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/models/DeviceSelectionModel.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/models/DeviceSelectionModel.java
deleted file mode 100644
index b00a1dc..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/models/DeviceSelectionModel.java
+++ /dev/null
@@ -1,285 +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.hierarchyviewerlib.models;
-
-import com.android.ddmlib.IDevice;
-import com.android.hierarchyviewerlib.device.DeviceBridge.ViewServerInfo;
-import com.android.hierarchyviewerlib.device.Window;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-/**
- * This class stores the list of windows for each connected device. It notifies
- * listeners of any changes as well as knows which window is currently selected
- * in the device selector.
- */
-public class DeviceSelectionModel {
-
- private final HashMap<IDevice, DeviceInfo> mDeviceMap = new HashMap<IDevice, DeviceInfo>();
-
- private final HashMap<IDevice, Integer> mFocusedWindowHashes = new HashMap<IDevice, Integer>();
-
- private final ArrayList<IDevice> mDeviceList = new ArrayList<IDevice>();
-
- private final ArrayList<IWindowChangeListener> mWindowChangeListeners =
- new ArrayList<IWindowChangeListener>();
-
- private IDevice mSelectedDevice;
-
- private Window mSelectedWindow;
-
- private static DeviceSelectionModel sModel;
-
- private static class DeviceInfo {
- Window[] windows;
- ViewServerInfo viewServerInfo;
-
- private DeviceInfo(Window[] windows, ViewServerInfo viewServerInfo) {
- this.windows = windows;
- this.viewServerInfo = viewServerInfo;
- }
- }
- public static DeviceSelectionModel getModel() {
- if (sModel == null) {
- sModel = new DeviceSelectionModel();
- }
- return sModel;
- }
-
- public boolean containsDevice(IDevice device) {
- synchronized (mDeviceMap) {
- return mDeviceMap.containsKey(device);
- }
- }
-
- public void addDevice(IDevice device, Window[] windows, ViewServerInfo info) {
- synchronized (mDeviceMap) {
- mDeviceMap.put(device, new DeviceInfo(windows, info));
- mDeviceList.add(device);
- }
- notifyDeviceConnected(device);
- }
-
- public void removeDevice(IDevice device) {
- boolean selectionChanged = false;
- synchronized (mDeviceMap) {
- mDeviceList.remove(device);
- if (!mDeviceList.contains(device)) {
- mDeviceMap.remove(device);
- mFocusedWindowHashes.remove(device);
- if (mSelectedDevice == device) {
- mSelectedDevice = null;
- mSelectedWindow = null;
- selectionChanged = true;
- }
- }
- }
- notifyDeviceDisconnected(device);
- if (selectionChanged) {
- notifySelectionChanged(mSelectedDevice, mSelectedWindow);
- }
- }
-
- public void updateDevice(IDevice device, Window[] windows) {
- boolean selectionChanged = false;
- synchronized (mDeviceMap) {
- DeviceInfo oldDeviceInfo = mDeviceMap.get(device);
- ViewServerInfo oldViewServerInfo = null;
- if (oldDeviceInfo != null) {
- oldViewServerInfo = oldDeviceInfo.viewServerInfo;
- }
- mDeviceMap.put(device, new DeviceInfo(windows, oldViewServerInfo));
- // If the selected window no longer exists, we clear the selection.
- if (mSelectedDevice == device && mSelectedWindow != null) {
- boolean windowStillExists = false;
- for (int i = 0; i < windows.length && !windowStillExists; i++) {
- if (windows[i].equals(mSelectedWindow)) {
- windowStillExists = true;
- }
- }
- if (!windowStillExists) {
- mSelectedDevice = null;
- mSelectedWindow = null;
- selectionChanged = true;
- }
- }
- }
- notifyDeviceChanged(device);
- if (selectionChanged) {
- notifySelectionChanged(mSelectedDevice, mSelectedWindow);
- }
- }
-
- /*
- * Change which window has focus and notify the listeners.
- */
- public void updateFocusedWindow(IDevice device, int focusedWindow) {
- Integer oldValue = null;
- synchronized (mDeviceMap) {
- oldValue = mFocusedWindowHashes.put(device, new Integer(focusedWindow));
- }
- // Only notify if the values are different. It would be cool if Java
- // containers accepted basic types like int.
- if (oldValue == null || (oldValue != null && oldValue.intValue() != focusedWindow)) {
- notifyFocusChanged(device);
- }
- }
-
- public static interface IWindowChangeListener {
- public void deviceConnected(IDevice device);
-
- public void deviceChanged(IDevice device);
-
- public void deviceDisconnected(IDevice device);
-
- public void focusChanged(IDevice device);
-
- public void selectionChanged(IDevice device, Window window);
- }
-
- private IWindowChangeListener[] getWindowChangeListenerList() {
- IWindowChangeListener[] listeners = null;
- synchronized (mWindowChangeListeners) {
- if (mWindowChangeListeners.size() == 0) {
- return null;
- }
- listeners =
- mWindowChangeListeners.toArray(new IWindowChangeListener[mWindowChangeListeners
- .size()]);
- }
- return listeners;
- }
-
- private void notifyDeviceConnected(IDevice device) {
- IWindowChangeListener[] listeners = getWindowChangeListenerList();
- if (listeners != null) {
- for (int i = 0; i < listeners.length; i++) {
- listeners[i].deviceConnected(device);
- }
- }
- }
-
- private void notifyDeviceChanged(IDevice device) {
- IWindowChangeListener[] listeners = getWindowChangeListenerList();
- if (listeners != null) {
- for (int i = 0; i < listeners.length; i++) {
- listeners[i].deviceChanged(device);
- }
- }
- }
-
- private void notifyDeviceDisconnected(IDevice device) {
- IWindowChangeListener[] listeners = getWindowChangeListenerList();
- if (listeners != null) {
- for (int i = 0; i < listeners.length; i++) {
- listeners[i].deviceDisconnected(device);
- }
- }
- }
-
- private void notifyFocusChanged(IDevice device) {
- IWindowChangeListener[] listeners = getWindowChangeListenerList();
- if (listeners != null) {
- for (int i = 0; i < listeners.length; i++) {
- listeners[i].focusChanged(device);
- }
- }
- }
-
- private void notifySelectionChanged(IDevice device, Window window) {
- IWindowChangeListener[] listeners = getWindowChangeListenerList();
- if (listeners != null) {
- for (int i = 0; i < listeners.length; i++) {
- listeners[i].selectionChanged(device, window);
- }
- }
- }
-
- public void addWindowChangeListener(IWindowChangeListener listener) {
- synchronized (mWindowChangeListeners) {
- mWindowChangeListeners.add(listener);
- }
- }
-
- public void removeWindowChangeListener(IWindowChangeListener listener) {
- synchronized (mWindowChangeListeners) {
- mWindowChangeListeners.remove(listener);
- }
- }
-
- public IDevice[] getDevices() {
- synchronized (mDeviceMap) {
- return mDeviceList.toArray(new IDevice[mDeviceList.size()]);
- }
- }
-
- public Window[] getWindows(IDevice device) {
- Window[] windows = null;
- synchronized (mDeviceMap) {
- DeviceInfo info = mDeviceMap.get(device);
- if (info != null) {
- windows = mDeviceMap.get(device).windows;
- }
- }
- return windows;
- }
-
- // Returns the window that currently has focus or -1. Note that this means
- // that a window with hashcode -1 gets highlighted. If you remember, this is
- // the infamous <Focused Window>
- public int getFocusedWindow(IDevice device) {
- synchronized (mDeviceMap) {
- Integer focusedWindow = mFocusedWindowHashes.get(device);
- if (focusedWindow == null) {
- return -1;
- }
- return focusedWindow.intValue();
- }
- }
-
- public void setSelection(IDevice device, Window window) {
- synchronized (mDeviceMap) {
- mSelectedDevice = device;
- mSelectedWindow = window;
- }
- notifySelectionChanged(device, window);
- }
-
- public IDevice getSelectedDevice() {
- synchronized (mDeviceMap) {
- return mSelectedDevice;
- }
- }
-
- public Window getSelectedWindow() {
- synchronized (mDeviceMap) {
- return mSelectedWindow;
- }
- }
-
- public ViewServerInfo getSelectedDeviceInfo() {
- synchronized (mDeviceMap) {
- ViewServerInfo viewServerInfo = null;
- if (mSelectedDevice != null) {
- return mDeviceMap.get(mSelectedDevice).viewServerInfo;
- }
- return null;
- }
- }
-
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/models/PixelPerfectModel.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/models/PixelPerfectModel.java
deleted file mode 100644
index 81331ed..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/models/PixelPerfectModel.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.hierarchyviewerlib.models;
-
-import com.android.ddmlib.IDevice;
-import com.android.hierarchyviewerlib.device.ViewNode;
-
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.widgets.Display;
-
-import java.util.ArrayList;
-
-public class PixelPerfectModel {
-
- public static final int MIN_ZOOM = 2;
-
- public static final int MAX_ZOOM = 24;
-
- public static final int DEFAULT_ZOOM = 8;
-
- public static final int DEFAULT_OVERLAY_TRANSPARENCY_PERCENTAGE = 50;
-
- private IDevice mDevice;
-
- private Image mImage;
-
- private Point mCrosshairLocation;
-
- private ViewNode mViewNode;
-
- private ViewNode mSelectedNode;
-
- private int mZoom;
-
- private final ArrayList<IImageChangeListener> mImageChangeListeners =
- new ArrayList<IImageChangeListener>();
-
- private Image mOverlayImage;
-
- private double mOverlayTransparency = DEFAULT_OVERLAY_TRANSPARENCY_PERCENTAGE / 100.0;
-
- private static PixelPerfectModel sModel;
-
- public static PixelPerfectModel getModel() {
- if (sModel == null) {
- sModel = new PixelPerfectModel();
- }
- return sModel;
- }
-
- public void setData(final IDevice device, final Image image, final ViewNode viewNode) {
- final Image toDispose = this.mImage;
- final Image toDispose2 = this.mOverlayImage;
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- synchronized (PixelPerfectModel.this) {
- PixelPerfectModel.this.mDevice = device;
- PixelPerfectModel.this.mImage = image;
- PixelPerfectModel.this.mViewNode = viewNode;
- if (image != null) {
- PixelPerfectModel.this.mCrosshairLocation =
- new Point(image.getBounds().width / 2, image.getBounds().height / 2);
- } else {
- PixelPerfectModel.this.mCrosshairLocation = null;
- }
- mOverlayImage = null;
- PixelPerfectModel.this.mSelectedNode = null;
- mZoom = DEFAULT_ZOOM;
- }
- }
- });
- notifyImageLoaded();
- if (toDispose != null) {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- toDispose.dispose();
- }
- });
- }
- if (toDispose2 != null) {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- toDispose2.dispose();
- }
- });
- }
-
- }
-
- public void setCrosshairLocation(int x, int y) {
- synchronized (this) {
- mCrosshairLocation = new Point(x, y);
- }
- notifyCrosshairMoved();
- }
-
- public void setSelected(ViewNode selected) {
- synchronized (this) {
- this.mSelectedNode = selected;
- }
- notifySelectionChanged();
- }
-
- public void setTree(final ViewNode viewNode) {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- synchronized (PixelPerfectModel.this) {
- PixelPerfectModel.this.mViewNode = viewNode;
- PixelPerfectModel.this.mSelectedNode = null;
- }
- }
- });
- notifyTreeChanged();
- }
-
- public void setImage(final Image image) {
- final Image toDispose = this.mImage;
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- synchronized (PixelPerfectModel.this) {
- PixelPerfectModel.this.mImage = image;
- }
- }
- });
- notifyImageChanged();
- if (toDispose != null) {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- toDispose.dispose();
- }
- });
- }
- }
-
- public void setZoom(int newZoom) {
- synchronized (this) {
- if (newZoom < MIN_ZOOM) {
- newZoom = MIN_ZOOM;
- }
- if (newZoom > MAX_ZOOM) {
- newZoom = MAX_ZOOM;
- }
- mZoom = newZoom;
- }
- notifyZoomChanged();
- }
-
- public void setOverlayImage(final Image overlayImage) {
- final Image toDispose = this.mOverlayImage;
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- synchronized (PixelPerfectModel.this) {
- PixelPerfectModel.this.mOverlayImage = overlayImage;
- }
- }
- });
- notifyOverlayChanged();
- if (toDispose != null) {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- toDispose.dispose();
- }
- });
- }
- }
-
- public void setOverlayTransparency(double value) {
- synchronized (this) {
- value = Math.max(value, 0);
- value = Math.min(value, 1);
- mOverlayTransparency = value;
- }
- notifyOverlayTransparencyChanged();
- }
-
- public ViewNode getViewNode() {
- synchronized (this) {
- return mViewNode;
- }
- }
-
- public Point getCrosshairLocation() {
- synchronized (this) {
- return mCrosshairLocation;
- }
- }
-
- public Image getImage() {
- synchronized (this) {
- return mImage;
- }
- }
-
- public ViewNode getSelected() {
- synchronized (this) {
- return mSelectedNode;
- }
- }
-
- public IDevice getDevice() {
- synchronized (this) {
- return mDevice;
- }
- }
-
- public int getZoom() {
- synchronized (this) {
- return mZoom;
- }
- }
-
- public Image getOverlayImage() {
- synchronized (this) {
- return mOverlayImage;
- }
- }
-
- public double getOverlayTransparency() {
- synchronized (this) {
- return mOverlayTransparency;
- }
- }
-
- public static interface IImageChangeListener {
- public void imageLoaded();
-
- public void imageChanged();
-
- public void crosshairMoved();
-
- public void selectionChanged();
-
- public void treeChanged();
-
- public void zoomChanged();
-
- public void overlayChanged();
-
- public void overlayTransparencyChanged();
- }
-
- private IImageChangeListener[] getImageChangeListenerList() {
- IImageChangeListener[] listeners = null;
- synchronized (mImageChangeListeners) {
- if (mImageChangeListeners.size() == 0) {
- return null;
- }
- listeners =
- mImageChangeListeners.toArray(new IImageChangeListener[mImageChangeListeners
- .size()]);
- }
- return listeners;
- }
-
- public void notifyImageLoaded() {
- IImageChangeListener[] listeners = getImageChangeListenerList();
- if (listeners != null) {
- for (int i = 0; i < listeners.length; i++) {
- listeners[i].imageLoaded();
- }
- }
- }
-
- public void notifyImageChanged() {
- IImageChangeListener[] listeners = getImageChangeListenerList();
- if (listeners != null) {
- for (int i = 0; i < listeners.length; i++) {
- listeners[i].imageChanged();
- }
- }
- }
-
- public void notifyCrosshairMoved() {
- IImageChangeListener[] listeners = getImageChangeListenerList();
- if (listeners != null) {
- for (int i = 0; i < listeners.length; i++) {
- listeners[i].crosshairMoved();
- }
- }
- }
-
- public void notifySelectionChanged() {
- IImageChangeListener[] listeners = getImageChangeListenerList();
- if (listeners != null) {
- for (int i = 0; i < listeners.length; i++) {
- listeners[i].selectionChanged();
- }
- }
- }
-
- public void notifyTreeChanged() {
- IImageChangeListener[] listeners = getImageChangeListenerList();
- if (listeners != null) {
- for (int i = 0; i < listeners.length; i++) {
- listeners[i].treeChanged();
- }
- }
- }
-
- public void notifyZoomChanged() {
- IImageChangeListener[] listeners = getImageChangeListenerList();
- if (listeners != null) {
- for (int i = 0; i < listeners.length; i++) {
- listeners[i].zoomChanged();
- }
- }
- }
-
- public void notifyOverlayChanged() {
- IImageChangeListener[] listeners = getImageChangeListenerList();
- if (listeners != null) {
- for (int i = 0; i < listeners.length; i++) {
- listeners[i].overlayChanged();
- }
- }
- }
-
- public void notifyOverlayTransparencyChanged() {
- IImageChangeListener[] listeners = getImageChangeListenerList();
- if (listeners != null) {
- for (int i = 0; i < listeners.length; i++) {
- listeners[i].overlayTransparencyChanged();
- }
- }
- }
-
- public void addImageChangeListener(IImageChangeListener listener) {
- synchronized (mImageChangeListeners) {
- mImageChangeListeners.add(listener);
- }
- }
-
- public void removeImageChangeListener(IImageChangeListener listener) {
- synchronized (mImageChangeListeners) {
- mImageChangeListeners.remove(listener);
- }
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/models/TreeViewModel.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/models/TreeViewModel.java
deleted file mode 100644
index 279b5fd..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/models/TreeViewModel.java
+++ /dev/null
@@ -1,217 +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.hierarchyviewerlib.models;
-
-import com.android.hierarchyviewerlib.device.ViewNode;
-import com.android.hierarchyviewerlib.device.Window;
-import com.android.hierarchyviewerlib.ui.util.DrawableViewNode;
-import com.android.hierarchyviewerlib.ui.util.DrawableViewNode.Point;
-import com.android.hierarchyviewerlib.ui.util.DrawableViewNode.Rectangle;
-
-import java.util.ArrayList;
-
-public class TreeViewModel {
- public static final double MAX_ZOOM = 2;
-
- public static final double MIN_ZOOM = 0.2;
-
- private Window mWindow;
-
- private DrawableViewNode mTree;
-
- private DrawableViewNode mSelectedNode;
-
- private Rectangle mViewport;
-
- private double mZoom;
-
- private final ArrayList<ITreeChangeListener> mTreeChangeListeners =
- new ArrayList<ITreeChangeListener>();
-
- private static TreeViewModel sModel;
-
- public static TreeViewModel getModel() {
- if (sModel == null) {
- sModel = new TreeViewModel();
- }
- return sModel;
- }
-
- public void setData(Window window, ViewNode viewNode) {
- synchronized (this) {
- if (mTree != null) {
- mTree.viewNode.dispose();
- }
- this.mWindow = window;
- if (viewNode == null) {
- mTree = null;
- } else {
- mTree = new DrawableViewNode(viewNode);
- mTree.setLeft();
- mTree.placeRoot();
- }
- mViewport = null;
- mZoom = 1;
- mSelectedNode = null;
- }
- notifyTreeChanged();
- }
-
- public void setSelection(DrawableViewNode selectedNode) {
- synchronized (this) {
- this.mSelectedNode = selectedNode;
- }
- notifySelectionChanged();
- }
-
- public void setViewport(Rectangle viewport) {
- synchronized (this) {
- this.mViewport = viewport;
- }
- notifyViewportChanged();
- }
-
- public void setZoom(double newZoom) {
- Point zoomPoint = null;
- synchronized (this) {
- if (mTree != null && mViewport != null) {
- zoomPoint =
- new Point(mViewport.x + mViewport.width / 2, mViewport.y + mViewport.height / 2);
- }
- }
- zoomOnPoint(newZoom, zoomPoint);
- }
-
- public void zoomOnPoint(double newZoom, Point zoomPoint) {
- synchronized (this) {
- if (mTree != null && this.mViewport != null) {
- if (newZoom < MIN_ZOOM) {
- newZoom = MIN_ZOOM;
- }
- if (newZoom > MAX_ZOOM) {
- newZoom = MAX_ZOOM;
- }
- mViewport.x = zoomPoint.x - (zoomPoint.x - mViewport.x) * mZoom / newZoom;
- mViewport.y = zoomPoint.y - (zoomPoint.y - mViewport.y) * mZoom / newZoom;
- mViewport.width = mViewport.width * mZoom / newZoom;
- mViewport.height = mViewport.height * mZoom / newZoom;
- mZoom = newZoom;
- }
- }
- notifyZoomChanged();
- }
-
- public DrawableViewNode getTree() {
- synchronized (this) {
- return mTree;
- }
- }
-
- public Window getWindow() {
- synchronized (this) {
- return mWindow;
- }
- }
-
- public Rectangle getViewport() {
- synchronized (this) {
- return mViewport;
- }
- }
-
- public double getZoom() {
- synchronized (this) {
- return mZoom;
- }
- }
-
- public DrawableViewNode getSelection() {
- synchronized (this) {
- return mSelectedNode;
- }
- }
-
- public static interface ITreeChangeListener {
- public void treeChanged();
-
- public void selectionChanged();
-
- public void viewportChanged();
-
- public void zoomChanged();
- }
-
- private ITreeChangeListener[] getTreeChangeListenerList() {
- ITreeChangeListener[] listeners = null;
- synchronized (mTreeChangeListeners) {
- if (mTreeChangeListeners.size() == 0) {
- return null;
- }
- listeners =
- mTreeChangeListeners.toArray(new ITreeChangeListener[mTreeChangeListeners.size()]);
- }
- return listeners;
- }
-
- public void notifyTreeChanged() {
- ITreeChangeListener[] listeners = getTreeChangeListenerList();
- if (listeners != null) {
- for (int i = 0; i < listeners.length; i++) {
- listeners[i].treeChanged();
- }
- }
- }
-
- public void notifySelectionChanged() {
- ITreeChangeListener[] listeners = getTreeChangeListenerList();
- if (listeners != null) {
- for (int i = 0; i < listeners.length; i++) {
- listeners[i].selectionChanged();
- }
- }
- }
-
- public void notifyViewportChanged() {
- ITreeChangeListener[] listeners = getTreeChangeListenerList();
- if (listeners != null) {
- for (int i = 0; i < listeners.length; i++) {
- listeners[i].viewportChanged();
- }
- }
- }
-
- public void notifyZoomChanged() {
- ITreeChangeListener[] listeners = getTreeChangeListenerList();
- if (listeners != null) {
- for (int i = 0; i < listeners.length; i++) {
- listeners[i].zoomChanged();
- }
- }
- }
-
- public void addTreeChangeListener(ITreeChangeListener listener) {
- synchronized (mTreeChangeListeners) {
- mTreeChangeListeners.add(listener);
- }
- }
-
- public void removeTreeChangeListener(ITreeChangeListener listener) {
- synchronized (mTreeChangeListeners) {
- mTreeChangeListeners.remove(listener);
- }
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/CaptureDisplay.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/CaptureDisplay.java
deleted file mode 100644
index fb277e8..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/CaptureDisplay.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Copyright (C) 2008 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.ddmuilib.ImageLoader;
-import com.android.hierarchyviewerlib.HierarchyViewerDirector;
-import com.android.hierarchyviewerlib.device.ViewNode;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.events.ShellAdapter;
-import org.eclipse.swt.events.ShellEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.layout.RowLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Canvas;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-
-public class CaptureDisplay {
- private static Shell sShell;
-
- private static Canvas sCanvas;
-
- private static Image sImage;
-
- private static ViewNode sViewNode;
-
- private static Composite sButtonBar;
-
- private static Button sOnWhite;
-
- private static Button sOnBlack;
-
- private static Button sShowExtras;
-
- public static void show(Shell parentShell, ViewNode viewNode, Image image) {
- if (sShell == null) {
- createShell();
- }
- if (sShell.isVisible() && CaptureDisplay.sViewNode != null) {
- CaptureDisplay.sViewNode.dereferenceImage();
- }
- CaptureDisplay.sImage = image;
- CaptureDisplay.sViewNode = viewNode;
- viewNode.referenceImage();
- sShell.setText(viewNode.name);
-
- boolean shellVisible = sShell.isVisible();
- if (!shellVisible) {
- sShell.setSize(0, 0);
- }
- Rectangle bounds =
- sShell.computeTrim(0, 0, Math.max(sButtonBar.getBounds().width,
- image.getBounds().width), sButtonBar.getBounds().height
- + image.getBounds().height + 5);
- sShell.setSize(bounds.width, bounds.height);
- if (!shellVisible) {
- sShell.setLocation(parentShell.getBounds().x
- + (parentShell.getBounds().width - bounds.width) / 2, parentShell.getBounds().y
- + (parentShell.getBounds().height - bounds.height) / 2);
- }
- sShell.open();
- if (shellVisible) {
- sCanvas.redraw();
- }
- }
-
- private static void createShell() {
- sShell = new Shell(Display.getDefault(), SWT.CLOSE | SWT.TITLE);
- GridLayout gridLayout = new GridLayout();
- gridLayout.marginWidth = 0;
- gridLayout.marginHeight = 0;
- sShell.setLayout(gridLayout);
-
- sButtonBar = new Composite(sShell, SWT.NONE);
- RowLayout rowLayout = new RowLayout(SWT.HORIZONTAL);
- rowLayout.pack = true;
- rowLayout.center = true;
- sButtonBar.setLayout(rowLayout);
- Composite buttons = new Composite(sButtonBar, SWT.NONE);
- buttons.setLayout(new FillLayout());
-
- sOnWhite = new Button(buttons, SWT.TOGGLE);
- sOnWhite.setText("On White");
- sOnBlack = new Button(buttons, SWT.TOGGLE);
- sOnBlack.setText("On Black");
- sOnBlack.setSelection(true);
- sOnWhite.addSelectionListener(sWhiteSelectionListener);
- sOnBlack.addSelectionListener(sBlackSelectionListener);
-
- sShowExtras = new Button(sButtonBar, SWT.CHECK);
- sShowExtras.setText("Show Extras");
- sShowExtras.addSelectionListener(sExtrasSelectionListener);
-
- sCanvas = new Canvas(sShell, SWT.NONE);
- sCanvas.setLayoutData(new GridData(GridData.FILL_BOTH));
- sCanvas.addPaintListener(sPaintListener);
-
- sShell.addShellListener(sShellListener);
-
- ImageLoader imageLoader = ImageLoader.getLoader(HierarchyViewerDirector.class);
- Image image = imageLoader.loadImage("display.png", Display.getDefault()); //$NON-NLS-1$
- sShell.setImage(image);
- }
-
- private static PaintListener sPaintListener = new PaintListener() {
-
- @Override
- public void paintControl(PaintEvent e) {
- if (sOnWhite.getSelection()) {
- e.gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
- } else {
- e.gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
- }
- e.gc.fillRectangle(0, 0, sCanvas.getBounds().width, sCanvas.getBounds().height);
- if (sImage != null) {
- int width = sImage.getBounds().width;
- int height = sImage.getBounds().height;
- int x = (sCanvas.getBounds().width - width) / 2;
- int y = (sCanvas.getBounds().height - height) / 2;
- e.gc.drawImage(sImage, x, y);
- if (sShowExtras.getSelection()) {
- if ((sViewNode.paddingLeft | sViewNode.paddingRight | sViewNode.paddingTop | sViewNode.paddingBottom) != 0) {
- e.gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLUE));
- e.gc.drawRectangle(x + sViewNode.paddingLeft, y + sViewNode.paddingTop, width
- - sViewNode.paddingLeft - sViewNode.paddingRight - 1, height
- - sViewNode.paddingTop - sViewNode.paddingBottom - 1);
- }
- if (sViewNode.hasMargins) {
- e.gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_GREEN));
- e.gc.drawRectangle(x - sViewNode.marginLeft, y - sViewNode.marginTop, width
- + sViewNode.marginLeft + sViewNode.marginRight - 1, height
- + sViewNode.marginTop + sViewNode.marginBottom - 1);
- }
- if (sViewNode.baseline != -1) {
- e.gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_RED));
- e.gc.drawLine(x, y + sViewNode.baseline, x + width - 1, sViewNode.baseline);
- }
- }
- }
- }
- };
-
- private static ShellAdapter sShellListener = new ShellAdapter() {
- @Override
- public void shellClosed(ShellEvent e) {
- e.doit = false;
- sShell.setVisible(false);
- if (sViewNode != null) {
- sViewNode.dereferenceImage();
- }
- }
-
- };
-
- private static SelectionListener sWhiteSelectionListener = new SelectionListener() {
- @Override
- public void widgetDefaultSelected(SelectionEvent e) {
- // pass
- }
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- sOnWhite.setSelection(true);
- sOnBlack.setSelection(false);
- sCanvas.redraw();
- }
- };
-
- private static SelectionListener sBlackSelectionListener = new SelectionListener() {
- @Override
- public void widgetDefaultSelected(SelectionEvent e) {
- // pass
- }
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- sOnBlack.setSelection(true);
- sOnWhite.setSelection(false);
- sCanvas.redraw();
- }
- };
-
- private static SelectionListener sExtrasSelectionListener = new SelectionListener() {
- @Override
- public void widgetDefaultSelected(SelectionEvent e) {
- // pass
- }
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- sCanvas.redraw();
- }
- };
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/DeviceSelector.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/DeviceSelector.java
deleted file mode 100644
index 84841ef..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/DeviceSelector.java
+++ /dev/null
@@ -1,340 +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.hierarchyviewerlib.ui;
-
-import com.android.ddmlib.IDevice;
-import com.android.ddmuilib.ImageLoader;
-import com.android.hierarchyviewerlib.HierarchyViewerDirector;
-import com.android.hierarchyviewerlib.device.Window;
-import com.android.hierarchyviewerlib.models.DeviceSelectionModel;
-import com.android.hierarchyviewerlib.models.DeviceSelectionModel.IWindowChangeListener;
-
-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.ControlAdapter;
-import org.eclipse.swt.events.ControlEvent;
-import org.eclipse.swt.events.ControlListener;
-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 IWindowChangeListener, SelectionListener {
- private TreeViewer mTreeViewer;
-
- private Tree mTree;
-
- private DeviceSelectionModel mModel;
-
- private Font mBoldFont;
-
- private Image mDeviceImage;
-
- private Image mEmulatorImage;
-
- private final static int ICON_WIDTH = 16;
-
- private boolean mDoTreeViewStuff;
-
- private boolean mDoPixelPerfectStuff;
-
- private class ContentProvider implements ITreeContentProvider, ILabelProvider, IFontProvider {
- @Override
- public Object[] getChildren(Object parentElement) {
- if (parentElement instanceof IDevice && mDoTreeViewStuff) {
- Window[] list = mModel.getWindows((IDevice) parentElement);
- if (list != null) {
- return list;
- }
- }
- return new Object[0];
- }
-
- @Override
- public Object getParent(Object element) {
- if (element instanceof Window) {
- return ((Window) element).getDevice();
- }
- return null;
- }
-
- @Override
- public boolean hasChildren(Object element) {
- if (element instanceof IDevice && mDoTreeViewStuff) {
- Window[] list = mModel.getWindows((IDevice) element);
- if (list != null) {
- return list.length != 0;
- }
- }
- return false;
- }
-
- @Override
- public Object[] getElements(Object inputElement) {
- if (inputElement instanceof DeviceSelectionModel) {
- return mModel.getDevices();
- }
- return new Object[0];
- }
-
- @Override
- public void dispose() {
- // pass
- }
-
- @Override
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- // pass
- }
-
- @Override
- public Image getImage(Object element) {
- if (element instanceof IDevice) {
- if (((IDevice) element).isEmulator()) {
- return mEmulatorImage;
- }
- return mDeviceImage;
- }
- return null;
- }
-
- @Override
- public String getText(Object element) {
- if (element instanceof IDevice) {
- return ((IDevice) element).toString();
- } else if (element instanceof Window) {
- return ((Window) element).getTitle();
- }
- return null;
- }
-
- @Override
- public Font getFont(Object element) {
- if (element instanceof Window) {
- int focusedWindow = mModel.getFocusedWindow(((Window) element).getDevice());
- if (focusedWindow == ((Window) element).getHashCode()) {
- return mBoldFont;
- }
- }
- return null;
- }
-
- @Override
- public void addListener(ILabelProviderListener listener) {
- // pass
- }
-
- @Override
- public boolean isLabelProperty(Object element, String property) {
- // pass
- return false;
- }
-
- @Override
- public void removeListener(ILabelProviderListener listener) {
- // pass
- }
- }
-
- public DeviceSelector(Composite parent, boolean doTreeViewStuff, boolean doPixelPerfectStuff) {
- super(parent, SWT.NONE);
- this.mDoTreeViewStuff = doTreeViewStuff;
- this.mDoPixelPerfectStuff = doPixelPerfectStuff;
- setLayout(new FillLayout());
- mTreeViewer = new TreeViewer(this, SWT.SINGLE);
- mTreeViewer.setAutoExpandLevel(TreeViewer.ALL_LEVELS);
-
- mTree = mTreeViewer.getTree();
- mTree.setLinesVisible(true);
- mTree.addSelectionListener(this);
-
- addDisposeListener(mDisposeListener);
-
- loadResources();
-
- mModel = DeviceSelectionModel.getModel();
- ContentProvider contentProvider = new ContentProvider();
- mTreeViewer.setContentProvider(contentProvider);
- mTreeViewer.setLabelProvider(contentProvider);
- mModel.addWindowChangeListener(this);
- mTreeViewer.setInput(mModel);
-
- addControlListener(mControlListener);
- }
-
- 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);
- }
- mBoldFont = new Font(Display.getDefault(), newFontData);
-
- ImageLoader loader = ImageLoader.getDdmUiLibLoader();
- mDeviceImage =
- loader.loadImage(display, "device.png", ICON_WIDTH, ICON_WIDTH, display //$NON-NLS-1$
- .getSystemColor(SWT.COLOR_RED));
-
- mEmulatorImage =
- loader.loadImage(display, "emulator.png", ICON_WIDTH, ICON_WIDTH, display //$NON-NLS-1$
- .getSystemColor(SWT.COLOR_BLUE));
- }
-
- private DisposeListener mDisposeListener = new DisposeListener() {
- @Override
- public void widgetDisposed(DisposeEvent e) {
- mModel.removeWindowChangeListener(DeviceSelector.this);
- mBoldFont.dispose();
- }
- };
-
- // If the window gets too small, hide the data, otherwise SWT throws an
- // ERROR.
-
- private ControlListener mControlListener = new ControlAdapter() {
- private boolean noInput = false;
-
- @Override
- public void controlResized(ControlEvent e) {
- if (getBounds().height <= 38) {
- mTreeViewer.setInput(null);
- noInput = true;
- } else if (noInput) {
- mTreeViewer.setInput(mModel);
- noInput = false;
- }
- }
- };
-
- @Override
- public boolean setFocus() {
- return mTree.setFocus();
- }
-
- public void setMode(boolean doTreeViewStuff, boolean doPixelPerfectStuff) {
- if (this.mDoTreeViewStuff != doTreeViewStuff
- || this.mDoPixelPerfectStuff != doPixelPerfectStuff) {
- final boolean expandAll = !this.mDoTreeViewStuff && doTreeViewStuff;
- this.mDoTreeViewStuff = doTreeViewStuff;
- this.mDoPixelPerfectStuff = doPixelPerfectStuff;
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- mTreeViewer.refresh();
- if (expandAll) {
- mTreeViewer.expandAll();
- }
- }
- });
- }
- }
-
- @Override
- public void deviceConnected(final IDevice device) {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- mTreeViewer.refresh();
- mTreeViewer.setExpandedState(device, true);
- }
- });
- }
-
- @Override
- public void deviceChanged(final IDevice device) {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- TreeSelection selection = (TreeSelection) mTreeViewer.getSelection();
- mTreeViewer.refresh(device);
- if (selection.getFirstElement() instanceof Window
- && ((Window) selection.getFirstElement()).getDevice() == device) {
- mTreeViewer.setSelection(selection, true);
- }
- }
- });
- }
-
- @Override
- public void deviceDisconnected(final IDevice device) {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- mTreeViewer.refresh();
- }
- });
- }
-
- @Override
- public void focusChanged(final IDevice device) {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- TreeSelection selection = (TreeSelection) mTreeViewer.getSelection();
- mTreeViewer.refresh(device);
- if (selection.getFirstElement() instanceof Window
- && ((Window) selection.getFirstElement()).getDevice() == device) {
- mTreeViewer.setSelection(selection, true);
- }
- }
- });
- }
-
- @Override
- public void selectionChanged(IDevice device, Window window) {
- // pass
- }
-
- @Override
- public void widgetDefaultSelected(SelectionEvent e) {
- Object selection = ((TreeItem) e.item).getData();
- if (selection instanceof IDevice && mDoPixelPerfectStuff) {
- HierarchyViewerDirector.getDirector().loadPixelPerfectData((IDevice) selection);
- } else if (selection instanceof Window && mDoTreeViewStuff) {
- HierarchyViewerDirector.getDirector().loadViewTreeData((Window) selection);
- }
- }
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- Object selection = ((TreeItem) e.item).getData();
- if (selection instanceof IDevice) {
- mModel.setSelection((IDevice) selection, null);
- } else if (selection instanceof Window) {
- mModel.setSelection(((Window) selection).getDevice(), (Window) selection);
- }
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/LayoutViewer.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/LayoutViewer.java
deleted file mode 100644
index 95c7a29..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/LayoutViewer.java
+++ /dev/null
@@ -1,372 +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.hierarchyviewerlib.ui;
-
-import com.android.hierarchyviewerlib.HierarchyViewerDirector;
-import com.android.hierarchyviewerlib.models.TreeViewModel;
-import com.android.hierarchyviewerlib.models.TreeViewModel.ITreeChangeListener;
-import com.android.hierarchyviewerlib.ui.util.DrawableViewNode;
-import com.android.hierarchyviewerlib.ui.util.DrawableViewNode.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.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.graphics.GC;
-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;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-
-import java.util.ArrayList;
-
-public class LayoutViewer extends Canvas implements ITreeChangeListener {
-
- private TreeViewModel mModel;
-
- private DrawableViewNode mTree;
-
- private DrawableViewNode mSelectedNode;
-
- private Transform mTransform;
-
- private Transform mInverse;
-
- private double mScale;
-
- private boolean mShowExtras = false;
-
- private boolean mOnBlack = true;
-
- public LayoutViewer(Composite parent) {
- super(parent, SWT.NONE);
- mModel = TreeViewModel.getModel();
- mModel.addTreeChangeListener(this);
-
- addDisposeListener(mDisposeListener);
- addPaintListener(mPaintListener);
- addListener(SWT.Resize, mResizeListener);
- addMouseListener(mMouseListener);
-
- mTransform = new Transform(Display.getDefault());
- mInverse = new Transform(Display.getDefault());
-
- treeChanged();
- }
-
- public void setShowExtras(boolean show) {
- mShowExtras = show;
- doRedraw();
- }
-
- public void setOnBlack(boolean value) {
- mOnBlack = value;
- doRedraw();
- }
-
- public boolean getOnBlack() {
- return mOnBlack;
- }
-
- private DisposeListener mDisposeListener = new DisposeListener() {
- @Override
- public void widgetDisposed(DisposeEvent e) {
- mModel.removeTreeChangeListener(LayoutViewer.this);
- mTransform.dispose();
- mInverse.dispose();
- if (mSelectedNode != null) {
- mSelectedNode.viewNode.dereferenceImage();
- }
- }
- };
-
- private Listener mResizeListener = new Listener() {
- @Override
- public void handleEvent(Event e) {
- synchronized (this) {
- setTransform();
- }
- }
- };
-
- private MouseListener mMouseListener = new MouseListener() {
-
- @Override
- public void mouseDoubleClick(MouseEvent e) {
- if (mSelectedNode != null) {
- HierarchyViewerDirector.getDirector()
- .showCapture(getShell(), mSelectedNode.viewNode);
- }
- }
-
- @Override
- public void mouseDown(MouseEvent e) {
- boolean selectionChanged = false;
- DrawableViewNode newSelection = null;
- synchronized (LayoutViewer.this) {
- if (mTree != null) {
- float[] pt = {
- e.x, e.y
- };
- mInverse.transform(pt);
- newSelection =
- updateSelection(mTree, pt[0], pt[1], 0, 0, 0, 0, mTree.viewNode.width,
- mTree.viewNode.height);
- if (mSelectedNode != newSelection) {
- selectionChanged = true;
- }
- }
- }
- if (selectionChanged) {
- mModel.setSelection(newSelection);
- }
- }
-
- @Override
- public void mouseUp(MouseEvent e) {
- // pass
- }
- };
-
- private DrawableViewNode updateSelection(DrawableViewNode node, float x, float y, int left,
- int top, int clipX, int clipY, int clipWidth, int clipHeight) {
- if (!node.treeDrawn) {
- return null;
- }
- // Update the clip
- int x1 = Math.max(left, clipX);
- int x2 = Math.min(left + node.viewNode.width, clipX + clipWidth);
- int y1 = Math.max(top, clipY);
- int y2 = Math.min(top + node.viewNode.height, clipY + clipHeight);
- clipX = x1;
- clipY = y1;
- clipWidth = x2 - x1;
- clipHeight = y2 - y1;
- if (x < clipX || x > clipX + clipWidth || y < clipY || y > clipY + clipHeight) {
- return null;
- }
- final int N = node.children.size();
- for (int i = N - 1; i >= 0; i--) {
- DrawableViewNode child = node.children.get(i);
- DrawableViewNode ret =
- updateSelection(child, x, y,
- left + child.viewNode.left - node.viewNode.scrollX, top
- + child.viewNode.top - node.viewNode.scrollY, clipX, clipY,
- clipWidth, clipHeight);
- if (ret != null) {
- return ret;
- }
- }
- return node;
- }
-
- private PaintListener mPaintListener = new PaintListener() {
- @Override
- public void paintControl(PaintEvent e) {
- synchronized (LayoutViewer.this) {
- if (mOnBlack) {
- e.gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
- } else {
- e.gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
- }
- e.gc.fillRectangle(0, 0, getBounds().width, getBounds().height);
- if (mTree != null) {
- e.gc.setLineWidth((int) Math.ceil(0.3 / mScale));
- e.gc.setTransform(mTransform);
- if (mOnBlack) {
- e.gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
- } else {
- e.gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
- }
- Rectangle parentClipping = e.gc.getClipping();
- e.gc.setClipping(0, 0, mTree.viewNode.width + (int) Math.ceil(0.3 / mScale),
- mTree.viewNode.height + (int) Math.ceil(0.3 / mScale));
- paintRecursive(e.gc, mTree, 0, 0, true);
-
- if (mSelectedNode != null) {
- e.gc.setClipping(parentClipping);
-
- // w00t, let's be nice and display the whole path in
- // light red and the selected node in dark red.
- ArrayList<Point> rightLeftDistances = new ArrayList<Point>();
- int left = 0;
- int top = 0;
- DrawableViewNode currentNode = mSelectedNode;
- while (currentNode != mTree) {
- left += currentNode.viewNode.left;
- top += currentNode.viewNode.top;
- currentNode = currentNode.parent;
- left -= currentNode.viewNode.scrollX;
- top -= currentNode.viewNode.scrollY;
- rightLeftDistances.add(new Point(left, top));
- }
- e.gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_DARK_RED));
- currentNode = mSelectedNode.parent;
- final int N = rightLeftDistances.size();
- for (int i = 0; i < N; i++) {
- e.gc.drawRectangle((int) (left - rightLeftDistances.get(i).x),
- (int) (top - rightLeftDistances.get(i).y),
- currentNode.viewNode.width, currentNode.viewNode.height);
- currentNode = currentNode.parent;
- }
-
- if (mShowExtras && mSelectedNode.viewNode.image != null) {
- e.gc.drawImage(mSelectedNode.viewNode.image, left, top);
- if (mOnBlack) {
- e.gc.setForeground(Display.getDefault().getSystemColor(
- SWT.COLOR_WHITE));
- } else {
- e.gc.setForeground(Display.getDefault().getSystemColor(
- SWT.COLOR_BLACK));
- }
- paintRecursive(e.gc, mSelectedNode, left, top, true);
-
- }
-
- e.gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_RED));
- e.gc.setLineWidth((int) Math.ceil(2 / mScale));
- e.gc.drawRectangle(left, top, mSelectedNode.viewNode.width,
- mSelectedNode.viewNode.height);
- }
- }
- }
- }
- };
-
- private void paintRecursive(GC gc, DrawableViewNode node, int left, int top, boolean root) {
- if (!node.treeDrawn) {
- return;
- }
- // Don't shift the root
- if (!root) {
- left += node.viewNode.left;
- top += node.viewNode.top;
- }
- Rectangle parentClipping = gc.getClipping();
- int x1 = Math.max(parentClipping.x, left);
- int x2 =
- Math.min(parentClipping.x + parentClipping.width, left + node.viewNode.width
- + (int) Math.ceil(0.3 / mScale));
- int y1 = Math.max(parentClipping.y, top);
- int y2 =
- Math.min(parentClipping.y + parentClipping.height, top + node.viewNode.height
- + (int) Math.ceil(0.3 / mScale));
-
- // Clipping is weird... You set it to -5 and it comes out 17 or
- // something.
- if (x2 <= x1 || y2 <= y1) {
- return;
- }
- gc.setClipping(x1, y1, x2 - x1, y2 - y1);
- final int N = node.children.size();
- for (int i = 0; i < N; i++) {
- paintRecursive(gc, node.children.get(i), left - node.viewNode.scrollX, top
- - node.viewNode.scrollY, false);
- }
- gc.setClipping(parentClipping);
- if (!node.viewNode.willNotDraw) {
- gc.drawRectangle(left, top, node.viewNode.width, node.viewNode.height);
- }
-
- }
-
- private void doRedraw() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- redraw();
- }
- });
- }
-
- private void setTransform() {
- if (mTree != null) {
- Rectangle bounds = getBounds();
- int leftRightPadding = bounds.width <= 30 ? 0 : 5;
- int topBottomPadding = bounds.height <= 30 ? 0 : 5;
- mScale =
- Math.min(1.0 * (bounds.width - leftRightPadding * 2) / mTree.viewNode.width, 1.0
- * (bounds.height - topBottomPadding * 2) / mTree.viewNode.height);
- int scaledWidth = (int) Math.ceil(mTree.viewNode.width * mScale);
- int scaledHeight = (int) Math.ceil(mTree.viewNode.height * mScale);
-
- mTransform.identity();
- mInverse.identity();
- mTransform.translate((bounds.width - scaledWidth) / 2.0f,
- (bounds.height - scaledHeight) / 2.0f);
- mInverse.translate((bounds.width - scaledWidth) / 2.0f,
- (bounds.height - scaledHeight) / 2.0f);
- mTransform.scale((float) mScale, (float) mScale);
- mInverse.scale((float) mScale, (float) mScale);
- if (bounds.width != 0 && bounds.height != 0) {
- mInverse.invert();
- }
- }
- }
-
- @Override
- public void selectionChanged() {
- synchronized (this) {
- if (mSelectedNode != null) {
- mSelectedNode.viewNode.dereferenceImage();
- }
- mSelectedNode = mModel.getSelection();
- if (mSelectedNode != null) {
- mSelectedNode.viewNode.referenceImage();
- }
- }
- doRedraw();
- }
-
- // Note the syncExec and then synchronized... It avoids deadlock
- @Override
- public void treeChanged() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- synchronized (this) {
- if (mSelectedNode != null) {
- mSelectedNode.viewNode.dereferenceImage();
- }
- mTree = mModel.getTree();
- mSelectedNode = mModel.getSelection();
- if (mSelectedNode != null) {
- mSelectedNode.viewNode.referenceImage();
- }
- setTransform();
- }
- }
- });
- doRedraw();
- }
-
- @Override
- public void viewportChanged() {
- // pass
- }
-
- @Override
- public void zoomChanged() {
- // pass
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PixelPerfect.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PixelPerfect.java
deleted file mode 100644
index 533b840..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PixelPerfect.java
+++ /dev/null
@@ -1,392 +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.hierarchyviewerlib.ui;
-
-import com.android.hierarchyviewerlib.device.ViewNode;
-import com.android.hierarchyviewerlib.models.PixelPerfectModel;
-import com.android.hierarchyviewerlib.models.PixelPerfectModel.IImageChangeListener;
-
-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.KeyEvent;
-import org.eclipse.swt.events.KeyListener;
-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.Point;
-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 IImageChangeListener {
- private Canvas mCanvas;
-
- private PixelPerfectModel mModel;
-
- private Image mImage;
-
- private Color mCrosshairColor;
-
- private Color mMarginColor;
-
- private Color mBorderColor;
-
- private Color mPaddingColor;
-
- private int mWidth;
-
- private int mHeight;
-
- private Point mCrosshairLocation;
-
- private ViewNode mSelectedNode;
-
- private Image mOverlayImage;
-
- private double mOverlayTransparency;
-
- public PixelPerfect(Composite parent) {
- super(parent, SWT.H_SCROLL | SWT.V_SCROLL);
- mCanvas = new Canvas(this, SWT.NONE);
- setContent(mCanvas);
- setExpandHorizontal(true);
- setExpandVertical(true);
- mModel = PixelPerfectModel.getModel();
- mModel.addImageChangeListener(this);
-
- mCanvas.addPaintListener(mPaintListener);
- mCanvas.addMouseListener(mMouseListener);
- mCanvas.addMouseMoveListener(mMouseMoveListener);
- mCanvas.addKeyListener(mKeyListener);
-
- addDisposeListener(mDisposeListener);
-
- mCrosshairColor = new Color(Display.getDefault(), new RGB(0, 255, 255));
- mBorderColor = new Color(Display.getDefault(), new RGB(255, 0, 0));
- mMarginColor = new Color(Display.getDefault(), new RGB(0, 255, 0));
- mPaddingColor = new Color(Display.getDefault(), new RGB(0, 0, 255));
-
- imageLoaded();
- }
-
- private DisposeListener mDisposeListener = new DisposeListener() {
- @Override
- public void widgetDisposed(DisposeEvent e) {
- mModel.removeImageChangeListener(PixelPerfect.this);
- mCrosshairColor.dispose();
- mBorderColor.dispose();
- mPaddingColor.dispose();
- }
- };
-
- @Override
- public boolean setFocus() {
- return mCanvas.setFocus();
- }
-
- private MouseListener mMouseListener = new MouseListener() {
-
- @Override
- public void mouseDoubleClick(MouseEvent e) {
- // pass
- }
-
- @Override
- public void mouseDown(MouseEvent e) {
- handleMouseEvent(e);
- }
-
- @Override
- public void mouseUp(MouseEvent e) {
- handleMouseEvent(e);
- }
-
- };
-
- private MouseMoveListener mMouseMoveListener = new MouseMoveListener() {
- @Override
- public void mouseMove(MouseEvent e) {
- if (e.stateMask != 0) {
- handleMouseEvent(e);
- }
- }
- };
-
- private void handleMouseEvent(MouseEvent e) {
- synchronized (PixelPerfect.this) {
- if (mImage == null) {
- return;
- }
- int leftOffset = mCanvas.getSize().x / 2 - mWidth / 2;
- int topOffset = mCanvas.getSize().y / 2 - mHeight / 2;
- e.x -= leftOffset;
- e.y -= topOffset;
- e.x = Math.max(e.x, 0);
- e.x = Math.min(e.x, mWidth - 1);
- e.y = Math.max(e.y, 0);
- e.y = Math.min(e.y, mHeight - 1);
- }
- mModel.setCrosshairLocation(e.x, e.y);
- }
-
- private KeyListener mKeyListener = new KeyListener() {
-
- @Override
- public void keyPressed(KeyEvent e) {
- boolean crosshairMoved = false;
- synchronized (PixelPerfect.this) {
- if (mImage != null) {
- switch (e.keyCode) {
- case SWT.ARROW_UP:
- if (mCrosshairLocation.y != 0) {
- mCrosshairLocation.y--;
- crosshairMoved = true;
- }
- break;
- case SWT.ARROW_DOWN:
- if (mCrosshairLocation.y != mHeight - 1) {
- mCrosshairLocation.y++;
- crosshairMoved = true;
- }
- break;
- case SWT.ARROW_LEFT:
- if (mCrosshairLocation.x != 0) {
- mCrosshairLocation.x--;
- crosshairMoved = true;
- }
- break;
- case SWT.ARROW_RIGHT:
- if (mCrosshairLocation.x != mWidth - 1) {
- mCrosshairLocation.x++;
- crosshairMoved = true;
- }
- break;
- }
- }
- }
- if (crosshairMoved) {
- mModel.setCrosshairLocation(mCrosshairLocation.x, mCrosshairLocation.y);
- }
- }
-
- @Override
- public void keyReleased(KeyEvent e) {
- // pass
- }
-
- };
-
- private PaintListener mPaintListener = new PaintListener() {
- @Override
- public void paintControl(PaintEvent e) {
- synchronized (PixelPerfect.this) {
- e.gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
- e.gc.fillRectangle(0, 0, mCanvas.getSize().x, mCanvas.getSize().y);
- if (mImage != null) {
- // Let's be cool and put it in the center...
- int leftOffset = mCanvas.getSize().x / 2 - mWidth / 2;
- int topOffset = mCanvas.getSize().y / 2 - mHeight / 2;
- e.gc.drawImage(mImage, leftOffset, topOffset);
- if (mOverlayImage != null) {
- e.gc.setAlpha((int) (mOverlayTransparency * 255));
- int overlayTopOffset =
- mCanvas.getSize().y / 2 + mHeight / 2
- - mOverlayImage.getBounds().height;
- e.gc.drawImage(mOverlayImage, leftOffset, overlayTopOffset);
- e.gc.setAlpha(255);
- }
-
- if (mSelectedNode != null) {
- // If the screen is in landscape mode, the
- // coordinates are backwards.
- int leftShift = 0;
- int topShift = 0;
- int nodeLeft = mSelectedNode.left;
- int nodeTop = mSelectedNode.top;
- int nodeWidth = mSelectedNode.width;
- int nodeHeight = mSelectedNode.height;
- int nodeMarginLeft = mSelectedNode.marginLeft;
- int nodeMarginTop = mSelectedNode.marginTop;
- int nodeMarginRight = mSelectedNode.marginRight;
- int nodeMarginBottom = mSelectedNode.marginBottom;
- int nodePadLeft = mSelectedNode.paddingLeft;
- int nodePadTop = mSelectedNode.paddingTop;
- int nodePadRight = mSelectedNode.paddingRight;
- int nodePadBottom = mSelectedNode.paddingBottom;
- ViewNode cur = mSelectedNode;
- while (cur.parent != null) {
- leftShift += cur.parent.left - cur.parent.scrollX;
- topShift += cur.parent.top - cur.parent.scrollY;
- cur = cur.parent;
- }
-
- // Everything is sideways.
- if (cur.width > cur.height) {
- e.gc.setForeground(mPaddingColor);
- e.gc.drawRectangle(leftOffset + mWidth - nodeTop - topShift - nodeHeight
- + nodePadBottom,
- topOffset + leftShift + nodeLeft + nodePadLeft, nodeHeight
- - nodePadBottom - nodePadTop, nodeWidth - nodePadRight
- - nodePadLeft);
- e.gc.setForeground(mMarginColor);
- e.gc.drawRectangle(leftOffset + mWidth - nodeTop - topShift - nodeHeight
- - nodeMarginBottom, topOffset + leftShift + nodeLeft
- - nodeMarginLeft,
- nodeHeight + nodeMarginBottom + nodeMarginTop, nodeWidth
- + nodeMarginRight + nodeMarginLeft);
- e.gc.setForeground(mBorderColor);
- e.gc.drawRectangle(
- leftOffset + mWidth - nodeTop - topShift - nodeHeight, topOffset
- + leftShift + nodeLeft, nodeHeight, nodeWidth);
- } else {
- e.gc.setForeground(mPaddingColor);
- e.gc.drawRectangle(leftOffset + leftShift + nodeLeft + nodePadLeft,
- topOffset + topShift + nodeTop + nodePadTop, nodeWidth
- - nodePadRight - nodePadLeft, nodeHeight
- - nodePadBottom - nodePadTop);
- e.gc.setForeground(mMarginColor);
- e.gc.drawRectangle(leftOffset + leftShift + nodeLeft - nodeMarginLeft,
- topOffset + topShift + nodeTop - nodeMarginTop, nodeWidth
- + nodeMarginRight + nodeMarginLeft, nodeHeight
- + nodeMarginBottom + nodeMarginTop);
- e.gc.setForeground(mBorderColor);
- e.gc.drawRectangle(leftOffset + leftShift + nodeLeft, topOffset
- + topShift + nodeTop, nodeWidth, nodeHeight);
- }
- }
- if (mCrosshairLocation != null) {
- e.gc.setForeground(mCrosshairColor);
- e.gc.drawLine(leftOffset, topOffset + mCrosshairLocation.y, leftOffset
- + mWidth - 1, topOffset + mCrosshairLocation.y);
- e.gc.drawLine(leftOffset + mCrosshairLocation.x, topOffset, leftOffset
- + mCrosshairLocation.x, topOffset + mHeight - 1);
- }
- }
- }
- }
- };
-
- private void doRedraw() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- mCanvas.redraw();
- }
- });
- }
-
- private void loadImage() {
- mImage = mModel.getImage();
- if (mImage != null) {
- mWidth = mImage.getBounds().width;
- mHeight = mImage.getBounds().height;
- } else {
- mWidth = 0;
- mHeight = 0;
- }
- setMinSize(mWidth, mHeight);
- }
-
- @Override
- public void imageLoaded() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- synchronized (this) {
- loadImage();
- mCrosshairLocation = mModel.getCrosshairLocation();
- mSelectedNode = mModel.getSelected();
- mOverlayImage = mModel.getOverlayImage();
- mOverlayTransparency = mModel.getOverlayTransparency();
- }
- }
- });
- doRedraw();
- }
-
- @Override
- public void imageChanged() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- synchronized (this) {
- loadImage();
- }
- }
- });
- doRedraw();
- }
-
- @Override
- public void crosshairMoved() {
- synchronized (this) {
- mCrosshairLocation = mModel.getCrosshairLocation();
- }
- doRedraw();
- }
-
- @Override
- public void selectionChanged() {
- synchronized (this) {
- mSelectedNode = mModel.getSelected();
- }
- doRedraw();
- }
-
- // Note the syncExec and then synchronized... It avoids deadlock
- @Override
- public void treeChanged() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- synchronized (this) {
- mSelectedNode = mModel.getSelected();
- }
- }
- });
- doRedraw();
- }
-
- @Override
- public void zoomChanged() {
- // pass
- }
-
- @Override
- public void overlayChanged() {
- synchronized (this) {
- mOverlayImage = mModel.getOverlayImage();
- mOverlayTransparency = mModel.getOverlayTransparency();
- }
- doRedraw();
- }
-
- @Override
- public void overlayTransparencyChanged() {
- synchronized (this) {
- mOverlayTransparency = mModel.getOverlayTransparency();
- }
- doRedraw();
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PixelPerfectControls.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PixelPerfectControls.java
deleted file mode 100644
index 6054088..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PixelPerfectControls.java
+++ /dev/null
@@ -1,296 +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.hierarchyviewerlib.ui;
-
-import com.android.hierarchyviewerlib.HierarchyViewerDirector;
-import com.android.hierarchyviewerlib.models.PixelPerfectModel;
-import com.android.hierarchyviewerlib.models.PixelPerfectModel.IImageChangeListener;
-
-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.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Slider;
-
-public class PixelPerfectControls extends Composite implements IImageChangeListener {
-
- private Slider mOverlaySlider;
-
- private Slider mZoomSlider;
-
- private Slider mAutoRefreshSlider;
-
- public PixelPerfectControls(Composite parent) {
- super(parent, SWT.NONE);
- setLayout(new FormLayout());
-
- Label overlayTransparencyRight = new Label(this, SWT.NONE);
- overlayTransparencyRight.setText("100%");
- FormData overlayTransparencyRightData = new FormData();
- overlayTransparencyRightData.right = new FormAttachment(100, -2);
- overlayTransparencyRightData.top = new FormAttachment(0, 2);
- overlayTransparencyRight.setLayoutData(overlayTransparencyRightData);
-
- Label refreshRight = new Label(this, SWT.NONE);
- refreshRight.setText("40s");
- FormData refreshRightData = new FormData();
- refreshRightData.right = new FormAttachment(100, -2);
- refreshRightData.top = new FormAttachment(overlayTransparencyRight, 2);
- refreshRightData.left = new FormAttachment(overlayTransparencyRight, 0, SWT.LEFT);
- refreshRight.setLayoutData(refreshRightData);
-
- Label zoomRight = new Label(this, SWT.NONE);
- zoomRight.setText("24x");
- FormData zoomRightData = new FormData();
- zoomRightData.right = new FormAttachment(100, -2);
- zoomRightData.top = new FormAttachment(refreshRight, 2);
- zoomRightData.left = new FormAttachment(overlayTransparencyRight, 0, SWT.LEFT);
- zoomRight.setLayoutData(zoomRightData);
-
- Label overlayTransparency = new Label(this, SWT.NONE);
- Label refresh = new Label(this, SWT.NONE);
-
- overlayTransparency.setText("Overlay:");
- FormData overlayTransparencyData = new FormData();
- overlayTransparencyData.left = new FormAttachment(0, 2);
- overlayTransparencyData.top = new FormAttachment(0, 2);
- overlayTransparencyData.right = new FormAttachment(refresh, 0, SWT.RIGHT);
- overlayTransparency.setLayoutData(overlayTransparencyData);
-
- refresh.setText("Refresh Rate:");
- FormData refreshData = new FormData();
- refreshData.top = new FormAttachment(overlayTransparency, 2);
- refreshData.left = new FormAttachment(0, 2);
- refresh.setLayoutData(refreshData);
-
- Label zoom = new Label(this, SWT.NONE);
- zoom.setText("Zoom:");
- FormData zoomData = new FormData();
- zoomData.right = new FormAttachment(refresh, 0, SWT.RIGHT);
- zoomData.top = new FormAttachment(refresh, 2);
- zoomData.left = new FormAttachment(0, 2);
- zoom.setLayoutData(zoomData);
-
- Label overlayTransparencyLeft = new Label(this, SWT.RIGHT);
- overlayTransparencyLeft.setText("0%");
- FormData overlayTransparencyLeftData = new FormData();
- overlayTransparencyLeftData.top = new FormAttachment(0, 2);
- overlayTransparencyLeftData.left = new FormAttachment(overlayTransparency, 2);
- overlayTransparencyLeft.setLayoutData(overlayTransparencyLeftData);
-
- Label refreshLeft = new Label(this, SWT.RIGHT);
- refreshLeft.setText("1s");
- FormData refreshLeftData = new FormData();
- refreshLeftData.top = new FormAttachment(overlayTransparencyLeft, 2);
- refreshLeftData.left = new FormAttachment(refresh, 2);
- refreshLeft.setLayoutData(refreshLeftData);
-
- Label zoomLeft = new Label(this, SWT.RIGHT);
- zoomLeft.setText("2x");
- FormData zoomLeftData = new FormData();
- zoomLeftData.top = new FormAttachment(refreshLeft, 2);
- zoomLeftData.left = new FormAttachment(zoom, 2);
- zoomLeft.setLayoutData(zoomLeftData);
-
- mOverlaySlider = new Slider(this, SWT.HORIZONTAL);
- mOverlaySlider.setMinimum(0);
- mOverlaySlider.setMaximum(101);
- mOverlaySlider.setThumb(1);
- mOverlaySlider.setSelection((int) Math.round(PixelPerfectModel.getModel()
- .getOverlayTransparency() * 100));
-
- Image overlayImage = PixelPerfectModel.getModel().getOverlayImage();
- mOverlaySlider.setEnabled(overlayImage != null);
- FormData overlaySliderData = new FormData();
- overlaySliderData.right = new FormAttachment(overlayTransparencyRight, -4);
- overlaySliderData.top = new FormAttachment(0, 2);
- overlaySliderData.left = new FormAttachment(overlayTransparencyLeft, 4);
- mOverlaySlider.setLayoutData(overlaySliderData);
-
- mOverlaySlider.addSelectionListener(overlaySliderSelectionListener);
-
- mAutoRefreshSlider = new Slider(this, SWT.HORIZONTAL);
- mAutoRefreshSlider.setMinimum(1);
- mAutoRefreshSlider.setMaximum(41);
- mAutoRefreshSlider.setThumb(1);
- mAutoRefreshSlider.setSelection(HierarchyViewerDirector.getDirector()
- .getPixelPerfectAutoRefreshInverval());
- FormData refreshSliderData = new FormData();
- refreshSliderData.right = new FormAttachment(overlayTransparencyRight, -4);
- refreshSliderData.top = new FormAttachment(overlayTransparencyRight, 2);
- refreshSliderData.left = new FormAttachment(mOverlaySlider, 0, SWT.LEFT);
- mAutoRefreshSlider.setLayoutData(refreshSliderData);
-
- mAutoRefreshSlider.addSelectionListener(mRefreshSliderSelectionListener);
-
- mZoomSlider = new Slider(this, SWT.HORIZONTAL);
- mZoomSlider.setMinimum(2);
- mZoomSlider.setMaximum(25);
- mZoomSlider.setThumb(1);
- mZoomSlider.setSelection(PixelPerfectModel.getModel().getZoom());
- FormData zoomSliderData = new FormData();
- zoomSliderData.right = new FormAttachment(overlayTransparencyRight, -4);
- zoomSliderData.top = new FormAttachment(refreshRight, 2);
- zoomSliderData.left = new FormAttachment(mOverlaySlider, 0, SWT.LEFT);
- mZoomSlider.setLayoutData(zoomSliderData);
-
- mZoomSlider.addSelectionListener(mZoomSliderSelectionListener);
-
- addDisposeListener(mDisposeListener);
-
- PixelPerfectModel.getModel().addImageChangeListener(this);
- }
-
- private DisposeListener mDisposeListener = new DisposeListener() {
- @Override
- public void widgetDisposed(DisposeEvent e) {
- PixelPerfectModel.getModel().removeImageChangeListener(PixelPerfectControls.this);
- }
- };
-
- private SelectionListener overlaySliderSelectionListener = new SelectionListener() {
- private int oldValue;
-
- @Override
- public void widgetDefaultSelected(SelectionEvent e) {
- // pass
- }
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- int newValue = mOverlaySlider.getSelection();
- if (oldValue != newValue) {
- PixelPerfectModel.getModel().removeImageChangeListener(PixelPerfectControls.this);
- PixelPerfectModel.getModel().setOverlayTransparency(newValue / 100.0);
- PixelPerfectModel.getModel().addImageChangeListener(PixelPerfectControls.this);
- oldValue = newValue;
- }
- }
- };
-
- private SelectionListener mRefreshSliderSelectionListener = new SelectionListener() {
- private int oldValue;
-
- @Override
- public void widgetDefaultSelected(final SelectionEvent e) {
- // pass
- }
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- int newValue = mAutoRefreshSlider.getSelection();
- if (oldValue != newValue) {
- HierarchyViewerDirector.getDirector().setPixelPerfectAutoRefreshInterval(newValue);
- }
- }
- };
-
- private SelectionListener mZoomSliderSelectionListener = new SelectionListener() {
- private int oldValue;
-
- @Override
- public void widgetDefaultSelected(SelectionEvent e) {
- // pass
- }
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- int newValue = mZoomSlider.getSelection();
- if (oldValue != newValue) {
- PixelPerfectModel.getModel().removeImageChangeListener(PixelPerfectControls.this);
- PixelPerfectModel.getModel().setZoom(newValue);
- PixelPerfectModel.getModel().addImageChangeListener(PixelPerfectControls.this);
- oldValue = newValue;
- }
- }
- };
-
- @Override
- public void crosshairMoved() {
- // pass
- }
-
- @Override
- public void treeChanged() {
- // pass
- }
-
- @Override
- public void imageChanged() {
- // pass
- }
-
- @Override
- public void imageLoaded() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- Image overlayImage = PixelPerfectModel.getModel().getOverlayImage();
- mOverlaySlider.setEnabled(overlayImage != null);
- if (PixelPerfectModel.getModel().getImage() == null) {
- } else {
- mZoomSlider.setSelection(PixelPerfectModel.getModel().getZoom());
- }
- }
- });
- }
-
- @Override
- public void overlayChanged() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- Image overlayImage = PixelPerfectModel.getModel().getOverlayImage();
- mOverlaySlider.setEnabled(overlayImage != null);
- }
- });
- }
-
- @Override
- public void overlayTransparencyChanged() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- mOverlaySlider.setSelection((int) (PixelPerfectModel.getModel()
- .getOverlayTransparency() * 100));
- }
- });
- }
-
- @Override
- public void selectionChanged() {
- // pass
- }
-
- @Override
- public void zoomChanged() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- mZoomSlider.setSelection(PixelPerfectModel.getModel().getZoom());
- }
- });
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PixelPerfectLoupe.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PixelPerfectLoupe.java
deleted file mode 100644
index ac3d66e..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PixelPerfectLoupe.java
+++ /dev/null
@@ -1,391 +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.hierarchyviewerlib.ui;
-
-import com.android.hierarchyviewerlib.models.PixelPerfectModel;
-import com.android.hierarchyviewerlib.models.PixelPerfectModel.IImageChangeListener;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.KeyListener;
-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.Point;
-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 IImageChangeListener {
- private PixelPerfectModel mModel;
-
- private Image mImage;
-
- private Image mGrid;
-
- private Color mCrosshairColor;
-
- private int mWidth;
-
- private int mHeight;
-
- private Point mCrosshairLocation;
-
- private int mZoom;
-
- private Transform mTransform;
-
- private int mCanvasWidth;
-
- private int mCanvasHeight;
-
- private Image mOverlayImage;
-
- private double mOverlayTransparency;
-
- private boolean mShowOverlay = false;
-
- public PixelPerfectLoupe(Composite parent) {
- super(parent, SWT.NONE);
- mModel = PixelPerfectModel.getModel();
- mModel.addImageChangeListener(this);
-
- addPaintListener(mPaintListener);
- addMouseListener(mMouseListener);
- addMouseWheelListener(mMouseWheelListener);
- addDisposeListener(mDisposeListener);
- addKeyListener(mKeyListener);
-
- mCrosshairColor = new Color(Display.getDefault(), new RGB(255, 94, 254));
-
- mTransform = new Transform(Display.getDefault());
-
- imageLoaded();
- }
-
- public void setShowOverlay(boolean value) {
- synchronized (this) {
- mShowOverlay = value;
- }
- doRedraw();
- }
-
- private DisposeListener mDisposeListener = new DisposeListener() {
- @Override
- public void widgetDisposed(DisposeEvent e) {
- mModel.removeImageChangeListener(PixelPerfectLoupe.this);
- mCrosshairColor.dispose();
- mTransform.dispose();
- if (mGrid != null) {
- mGrid.dispose();
- }
- }
- };
-
- private MouseListener mMouseListener = new MouseListener() {
-
- @Override
- public void mouseDoubleClick(MouseEvent e) {
- // pass
- }
-
- @Override
- public void mouseDown(MouseEvent e) {
- handleMouseEvent(e);
- }
-
- @Override
- public void mouseUp(MouseEvent e) {
- //
- }
-
- };
-
- private MouseWheelListener mMouseWheelListener = new MouseWheelListener() {
- @Override
- public void mouseScrolled(MouseEvent e) {
- int newZoom = -1;
- synchronized (PixelPerfectLoupe.this) {
- if (mImage != null && mCrosshairLocation != null) {
- if (e.count > 0) {
- newZoom = mZoom + 1;
- } else {
- newZoom = mZoom - 1;
- }
- }
- }
- if (newZoom != -1) {
- mModel.setZoom(newZoom);
- }
- }
- };
-
- private void handleMouseEvent(MouseEvent e) {
- int newX = -1;
- int newY = -1;
- synchronized (PixelPerfectLoupe.this) {
- if (mImage == null) {
- return;
- }
- int zoomedX = -mCrosshairLocation.x * mZoom - mZoom / 2 + getBounds().width / 2;
- int zoomedY = -mCrosshairLocation.y * mZoom - mZoom / 2 + getBounds().height / 2;
- int x = (e.x - zoomedX) / mZoom;
- int y = (e.y - zoomedY) / mZoom;
- if (x >= 0 && x < mWidth && y >= 0 && y < mHeight) {
- newX = x;
- newY = y;
- }
- }
- if (newX != -1) {
- mModel.setCrosshairLocation(newX, newY);
- }
- }
-
- private KeyListener mKeyListener = new KeyListener() {
-
- @Override
- public void keyPressed(KeyEvent e) {
- boolean crosshairMoved = false;
- synchronized (PixelPerfectLoupe.this) {
- if (mImage != null) {
- switch (e.keyCode) {
- case SWT.ARROW_UP:
- if (mCrosshairLocation.y != 0) {
- mCrosshairLocation.y--;
- crosshairMoved = true;
- }
- break;
- case SWT.ARROW_DOWN:
- if (mCrosshairLocation.y != mHeight - 1) {
- mCrosshairLocation.y++;
- crosshairMoved = true;
- }
- break;
- case SWT.ARROW_LEFT:
- if (mCrosshairLocation.x != 0) {
- mCrosshairLocation.x--;
- crosshairMoved = true;
- }
- break;
- case SWT.ARROW_RIGHT:
- if (mCrosshairLocation.x != mWidth - 1) {
- mCrosshairLocation.x++;
- crosshairMoved = true;
- }
- break;
- }
- }
- }
- if (crosshairMoved) {
- mModel.setCrosshairLocation(mCrosshairLocation.x, mCrosshairLocation.y);
- }
- }
-
- @Override
- public void keyReleased(KeyEvent e) {
- // pass
- }
-
- };
-
- private PaintListener mPaintListener = new PaintListener() {
- @Override
- public void paintControl(PaintEvent e) {
- synchronized (PixelPerfectLoupe.this) {
- e.gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
- e.gc.fillRectangle(0, 0, getSize().x, getSize().y);
- if (mImage != null && mCrosshairLocation != null) {
- int zoomedX = -mCrosshairLocation.x * mZoom - mZoom / 2 + getBounds().width / 2;
- int zoomedY = -mCrosshairLocation.y * mZoom - mZoom / 2 + getBounds().height / 2;
- mTransform.translate(zoomedX, zoomedY);
- mTransform.scale(mZoom, mZoom);
- e.gc.setInterpolation(SWT.NONE);
- e.gc.setTransform(mTransform);
- e.gc.drawImage(mImage, 0, 0);
- if (mShowOverlay && mOverlayImage != null) {
- e.gc.setAlpha((int) (mOverlayTransparency * 255));
- e.gc.drawImage(mOverlayImage, 0, mHeight - mOverlayImage.getBounds().height);
- e.gc.setAlpha(255);
- }
-
- mTransform.identity();
- e.gc.setTransform(mTransform);
-
- // If the size of the canvas has changed, we need to make
- // another grid.
- if (mGrid != null
- && (mCanvasWidth != getBounds().width || mCanvasHeight != getBounds().height)) {
- mGrid.dispose();
- mGrid = null;
- }
- mCanvasWidth = getBounds().width;
- mCanvasHeight = getBounds().height;
- if (mGrid == null) {
- // Make a transparent image;
- ImageData imageData =
- new ImageData(mCanvasWidth + mZoom + 1, mCanvasHeight + mZoom + 1, 1,
- new PaletteData(new RGB[] {
- new RGB(0, 0, 0)
- }));
- imageData.transparentPixel = 0;
-
- // Draw the grid.
- mGrid = new Image(Display.getDefault(), imageData);
- GC gc = new GC(mGrid);
- gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
- for (int x = 0; x <= mCanvasWidth + mZoom; x += mZoom) {
- gc.drawLine(x, 0, x, mCanvasHeight + mZoom);
- }
- for (int y = 0; y <= mCanvasHeight + mZoom; y += mZoom) {
- gc.drawLine(0, y, mCanvasWidth + mZoom, y);
- }
- gc.dispose();
- }
-
- e.gc.setClipping(new Rectangle(zoomedX, zoomedY, mWidth * mZoom + 1, mHeight
- * mZoom + 1));
- e.gc.setAlpha(76);
- e.gc.drawImage(mGrid, (mCanvasWidth / 2 - mZoom / 2) % mZoom - mZoom,
- (mCanvasHeight / 2 - mZoom / 2) % mZoom - mZoom);
- e.gc.setAlpha(255);
-
- e.gc.setForeground(mCrosshairColor);
- e.gc.drawLine(0, mCanvasHeight / 2, mCanvasWidth - 1, mCanvasHeight / 2);
- e.gc.drawLine(mCanvasWidth / 2, 0, mCanvasWidth / 2, mCanvasHeight - 1);
- }
- }
- }
- };
-
- private void doRedraw() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- redraw();
- }
- });
- }
-
- private void loadImage() {
- mImage = mModel.getImage();
- if (mImage != null) {
- mWidth = mImage.getBounds().width;
- mHeight = mImage.getBounds().height;
- } else {
- mWidth = 0;
- mHeight = 0;
- }
- }
-
- // Note the syncExec and then synchronized... It avoids deadlock
- @Override
- public void imageLoaded() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- synchronized (this) {
- loadImage();
- mCrosshairLocation = mModel.getCrosshairLocation();
- mZoom = mModel.getZoom();
- mOverlayImage = mModel.getOverlayImage();
- mOverlayTransparency = mModel.getOverlayTransparency();
- }
- }
- });
- doRedraw();
- }
-
- @Override
- public void imageChanged() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- synchronized (this) {
- loadImage();
- }
- }
- });
- doRedraw();
- }
-
- @Override
- public void crosshairMoved() {
- synchronized (this) {
- mCrosshairLocation = mModel.getCrosshairLocation();
- }
- doRedraw();
- }
-
- @Override
- public void selectionChanged() {
- // pass
- }
-
- @Override
- public void treeChanged() {
- // pass
- }
-
- @Override
- public void zoomChanged() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- synchronized (this) {
- if (mGrid != null) {
- // To notify that the zoom level has changed, we get rid
- // of the
- // grid.
- mGrid.dispose();
- mGrid = null;
- }
- mZoom = mModel.getZoom();
- }
- }
- });
- doRedraw();
- }
-
- @Override
- public void overlayChanged() {
- synchronized (this) {
- mOverlayImage = mModel.getOverlayImage();
- mOverlayTransparency = mModel.getOverlayTransparency();
- }
- doRedraw();
- }
-
- @Override
- public void overlayTransparencyChanged() {
- synchronized (this) {
- mOverlayTransparency = mModel.getOverlayTransparency();
- }
- doRedraw();
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PixelPerfectPixelPanel.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PixelPerfectPixelPanel.java
deleted file mode 100644
index d1ff6d9..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PixelPerfectPixelPanel.java
+++ /dev/null
@@ -1,203 +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.hierarchyviewerlib.ui;
-
-import com.android.hierarchyviewerlib.models.PixelPerfectModel;
-import com.android.hierarchyviewerlib.models.PixelPerfectModel.IImageChangeListener;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-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.Point;
-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 PixelPerfectPixelPanel extends Canvas implements IImageChangeListener {
- private PixelPerfectModel mModel;
-
- private Image mImage;
-
- private Image mOverlayImage;
-
- private Point mCrosshairLocation;
-
- public static final int PREFERRED_WIDTH = 180;
-
- public static final int PREFERRED_HEIGHT = 52;
-
- public PixelPerfectPixelPanel(Composite parent) {
- super(parent, SWT.NONE);
- mModel = PixelPerfectModel.getModel();
- mModel.addImageChangeListener(this);
-
- addPaintListener(mPaintListener);
- addDisposeListener(mDisposeListener);
-
- imageLoaded();
- }
-
- @Override
- public Point computeSize(int wHint, int hHint, boolean changed) {
- int height = PREFERRED_HEIGHT;
- int width = (wHint == SWT.DEFAULT) ? PREFERRED_WIDTH : wHint;
- return new Point(width, height);
- }
-
- private DisposeListener mDisposeListener = new DisposeListener() {
- @Override
- public void widgetDisposed(DisposeEvent e) {
- mModel.removeImageChangeListener(PixelPerfectPixelPanel.this);
- }
- };
-
- private PaintListener mPaintListener = new PaintListener() {
- @Override
- public void paintControl(PaintEvent e) {
- synchronized (PixelPerfectPixelPanel.this) {
- e.gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
- e.gc.fillRectangle(0, 0, getBounds().width, getBounds().height);
- if (mImage != null) {
- RGB pixel =
- mImage.getImageData().palette.getRGB(mImage.getImageData().getPixel(
- mCrosshairLocation.x, mCrosshairLocation.y));
- Color rgbColor = new Color(Display.getDefault(), pixel);
- e.gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
- e.gc.setBackground(rgbColor);
- e.gc.drawRectangle(4, 4, 60, 30);
- e.gc.fillRectangle(5, 5, 59, 29);
- rgbColor.dispose();
- e.gc.drawText("#"
- + Integer
- .toHexString(
- (1 << 24) + (pixel.red << 16) + (pixel.green << 8)
- + pixel.blue).substring(1), 4, 35, true);
- e.gc.drawText("R:", 80, 4, true);
- e.gc.drawText("G:", 80, 20, true);
- e.gc.drawText("B:", 80, 35, true);
- e.gc.drawText(Integer.toString(pixel.red), 97, 4, true);
- e.gc.drawText(Integer.toString(pixel.green), 97, 20, true);
- e.gc.drawText(Integer.toString(pixel.blue), 97, 35, true);
- e.gc.drawText("X:", 132, 4, true);
- e.gc.drawText("Y:", 132, 20, true);
- e.gc.drawText(Integer.toString(mCrosshairLocation.x) + " px", 149, 4, true);
- e.gc.drawText(Integer.toString(mCrosshairLocation.y) + " px", 149, 20, true);
-
- if (mOverlayImage != null) {
- int xInOverlay = mCrosshairLocation.x;
- int yInOverlay =
- mCrosshairLocation.y
- - (mImage.getBounds().height - mOverlayImage.getBounds().height);
- if (xInOverlay >= 0 && yInOverlay >= 0
- && xInOverlay < mOverlayImage.getBounds().width
- && yInOverlay < mOverlayImage.getBounds().height) {
- pixel =
- mOverlayImage.getImageData().palette.getRGB(mOverlayImage
- .getImageData().getPixel(xInOverlay, yInOverlay));
- rgbColor = new Color(Display.getDefault(), pixel);
- e.gc
- .setForeground(Display.getDefault().getSystemColor(
- SWT.COLOR_WHITE));
- e.gc.setBackground(rgbColor);
- e.gc.drawRectangle(204, 4, 60, 30);
- e.gc.fillRectangle(205, 5, 59, 29);
- rgbColor.dispose();
- e.gc.drawText("#"
- + Integer.toHexString(
- (1 << 24) + (pixel.red << 16) + (pixel.green << 8)
- + pixel.blue).substring(1), 204, 35, true);
- e.gc.drawText("R:", 280, 4, true);
- e.gc.drawText("G:", 280, 20, true);
- e.gc.drawText("B:", 280, 35, true);
- e.gc.drawText(Integer.toString(pixel.red), 297, 4, true);
- e.gc.drawText(Integer.toString(pixel.green), 297, 20, true);
- e.gc.drawText(Integer.toString(pixel.blue), 297, 35, true);
- }
- }
- }
- }
- }
- };
-
- private void doRedraw() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- redraw();
- }
- });
- }
-
- @Override
- public void crosshairMoved() {
- synchronized (this) {
- mCrosshairLocation = mModel.getCrosshairLocation();
- }
- doRedraw();
- }
-
- @Override
- public void imageChanged() {
- synchronized (this) {
- mImage = mModel.getImage();
- }
- doRedraw();
- }
-
- @Override
- public void imageLoaded() {
- synchronized (this) {
- mImage = mModel.getImage();
- mCrosshairLocation = mModel.getCrosshairLocation();
- mOverlayImage = mModel.getOverlayImage();
- }
- doRedraw();
- }
-
- @Override
- public void overlayChanged() {
- synchronized (this) {
- mOverlayImage = mModel.getOverlayImage();
- }
- doRedraw();
- }
-
- @Override
- public void overlayTransparencyChanged() {
- // pass
- }
-
- @Override
- public void selectionChanged() {
- // pass
- }
-
- @Override
- public void treeChanged() {
- // pass
- }
-
- @Override
- public void zoomChanged() {
- // pass
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PixelPerfectTree.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PixelPerfectTree.java
deleted file mode 100644
index e9848d8..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PixelPerfectTree.java
+++ /dev/null
@@ -1,241 +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.hierarchyviewerlib.ui;
-
-import com.android.ddmuilib.ImageLoader;
-import com.android.hierarchyviewerlib.device.ViewNode;
-import com.android.hierarchyviewerlib.models.PixelPerfectModel;
-import com.android.hierarchyviewerlib.models.PixelPerfectModel.IImageChangeListener;
-
-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 java.util.List;
-
-public class PixelPerfectTree extends Composite implements IImageChangeListener, SelectionListener {
-
- private TreeViewer mTreeViewer;
-
- private Tree mTree;
-
- private PixelPerfectModel mModel;
-
- private Image mFolderImage;
-
- private Image mFileImage;
-
- private class ContentProvider implements ITreeContentProvider, ILabelProvider {
- @Override
- public Object[] getChildren(Object element) {
- if (element instanceof ViewNode) {
- List<ViewNode> children = ((ViewNode) element).children;
- return children.toArray(new ViewNode[children.size()]);
- }
- return null;
- }
-
- @Override
- public Object getParent(Object element) {
- if (element instanceof ViewNode) {
- return ((ViewNode) element).parent;
- }
- return null;
- }
-
- @Override
- public boolean hasChildren(Object element) {
- if (element instanceof ViewNode) {
- return ((ViewNode) element).children.size() != 0;
- }
- return false;
- }
-
- @Override
- 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];
- }
-
- @Override
- public void dispose() {
- // pass
- }
-
- @Override
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- // pass
- }
-
- @Override
- public Image getImage(Object element) {
- if (element instanceof ViewNode) {
- if (hasChildren(element)) {
- return mFolderImage;
- }
- return mFileImage;
- }
- return null;
- }
-
- @Override
- public String getText(Object element) {
- if (element instanceof ViewNode) {
- return ((ViewNode) element).name;
- }
- return null;
- }
-
- @Override
- public void addListener(ILabelProviderListener listener) {
- // pass
- }
-
- @Override
- public boolean isLabelProperty(Object element, String property) {
- // pass
- return false;
- }
-
- @Override
- public void removeListener(ILabelProviderListener listener) {
- // pass
- }
- }
-
- public PixelPerfectTree(Composite parent) {
- super(parent, SWT.NONE);
- setLayout(new FillLayout());
- mTreeViewer = new TreeViewer(this, SWT.SINGLE);
- mTreeViewer.setAutoExpandLevel(TreeViewer.ALL_LEVELS);
-
- mTree = mTreeViewer.getTree();
- mTree.addSelectionListener(this);
-
- loadResources();
-
- addDisposeListener(mDisposeListener);
-
- mModel = PixelPerfectModel.getModel();
- ContentProvider contentProvider = new ContentProvider();
- mTreeViewer.setContentProvider(contentProvider);
- mTreeViewer.setLabelProvider(contentProvider);
- mTreeViewer.setInput(mModel);
- mModel.addImageChangeListener(this);
-
- }
-
- private void loadResources() {
- ImageLoader loader = ImageLoader.getDdmUiLibLoader();
- mFileImage = loader.loadImage("file.png", Display.getDefault());
- mFolderImage = loader.loadImage("folder.png", Display.getDefault());
- }
-
- private DisposeListener mDisposeListener = new DisposeListener() {
- @Override
- public void widgetDisposed(DisposeEvent e) {
- mModel.removeImageChangeListener(PixelPerfectTree.this);
- }
- };
-
- @Override
- public boolean setFocus() {
- return mTree.setFocus();
- }
-
- @Override
- public void imageLoaded() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- mTreeViewer.refresh();
- mTreeViewer.expandAll();
- }
- });
- }
-
- @Override
- public void imageChanged() {
- // pass
- }
-
- @Override
- public void crosshairMoved() {
- // pass
- }
-
- @Override
- public void selectionChanged() {
- // pass
- }
-
- @Override
- public void treeChanged() {
- imageLoaded();
- }
-
- @Override
- public void widgetDefaultSelected(SelectionEvent e) {
- // pass
- }
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- // To combat phantom selection...
- if (((TreeSelection) mTreeViewer.getSelection()).isEmpty()) {
- mModel.setSelected(null);
- } else {
- mModel.setSelected((ViewNode) e.item.getData());
- }
- }
-
- @Override
- public void zoomChanged() {
- // pass
- }
-
- @Override
- public void overlayChanged() {
- // pass
- }
-
- @Override
- public void overlayTransparencyChanged() {
- // pass
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PropertyViewer.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PropertyViewer.java
deleted file mode 100644
index 919d178..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/PropertyViewer.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.hierarchyviewerlib.ui;
-
-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.ITreeChangeListener;
-import com.android.hierarchyviewerlib.ui.util.DrawableViewNode;
-import com.android.hierarchyviewerlib.ui.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.events.ControlAdapter;
-import org.eclipse.swt.events.ControlEvent;
-import org.eclipse.swt.events.ControlListener;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-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.ArrayList;
-
-public class PropertyViewer extends Composite implements ITreeChangeListener {
- private TreeViewModel mModel;
-
- private TreeViewer mTreeViewer;
-
- private Tree mTree;
-
- private DrawableViewNode mSelectedNode;
-
- private class ContentProvider implements ITreeContentProvider, ITableLabelProvider {
-
- @Override
- public Object[] getChildren(Object parentElement) {
- synchronized (PropertyViewer.this) {
- if (mSelectedNode != null && parentElement instanceof String) {
- String category = (String) parentElement;
- ArrayList<Property> returnValue = new ArrayList<Property>();
- for (Property property : mSelectedNode.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];
- }
- }
-
- @Override
- public Object getParent(Object element) {
- synchronized (PropertyViewer.this) {
- if (mSelectedNode != null && element instanceof Property) {
- if (mSelectedNode.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;
- }
- }
-
- @Override
- public boolean hasChildren(Object element) {
- synchronized (PropertyViewer.this) {
- if (mSelectedNode != null && element instanceof String) {
- String category = (String) element;
- for (String name : mSelectedNode.viewNode.namedProperties.keySet()) {
- if (category.equals(ViewNode.MISCELLANIOUS)) {
- if (name.indexOf(':') == -1) {
- return true;
- }
- } else {
- if (name.startsWith(((String) element) + ":")) {
- return true;
- }
- }
- }
- }
- return false;
- }
- }
-
- @Override
- public Object[] getElements(Object inputElement) {
- synchronized (PropertyViewer.this) {
- if (mSelectedNode != null && inputElement instanceof TreeViewModel) {
- if (mSelectedNode.viewNode.categories.size() == 0) {
- return mSelectedNode.viewNode.properties
- .toArray(new Property[mSelectedNode.viewNode.properties.size()]);
- } else {
- return mSelectedNode.viewNode.categories
- .toArray(new String[mSelectedNode.viewNode.categories.size()]);
- }
- }
- return new Object[0];
- }
- }
-
- @Override
- public void dispose() {
- // pass
- }
-
- @Override
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- // pass
- }
-
- @Override
- public Image getColumnImage(Object element, int column) {
- return null;
- }
-
- @Override
- public String getColumnText(Object element, int column) {
- synchronized (PropertyViewer.this) {
- if (mSelectedNode != 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 "";
- }
- }
-
- @Override
- public void addListener(ILabelProviderListener listener) {
- // pass
- }
-
- @Override
- public boolean isLabelProperty(Object element, String property) {
- // pass
- return false;
- }
-
- @Override
- public void removeListener(ILabelProviderListener listener) {
- // pass
- }
- }
-
- public PropertyViewer(Composite parent) {
- super(parent, SWT.NONE);
- setLayout(new FillLayout());
- mTreeViewer = new TreeViewer(this, SWT.NONE);
-
- mTree = mTreeViewer.getTree();
- mTree.setLinesVisible(true);
- mTree.setHeaderVisible(true);
-
- TreeColumn propertyColumn = new TreeColumn(mTree, SWT.NONE);
- propertyColumn.setText("Property");
- TreeColumn valueColumn = new TreeColumn(mTree, SWT.NONE);
- valueColumn.setText("Value");
-
- mModel = TreeViewModel.getModel();
- ContentProvider contentProvider = new ContentProvider();
- mTreeViewer.setContentProvider(contentProvider);
- mTreeViewer.setLabelProvider(contentProvider);
- mTreeViewer.setInput(mModel);
- mModel.addTreeChangeListener(this);
-
- addDisposeListener(mDisposeListener);
-
- new TreeColumnResizer(this, propertyColumn, valueColumn);
-
- addControlListener(mControlListener);
-
- treeChanged();
- }
-
- private DisposeListener mDisposeListener = new DisposeListener() {
- @Override
- public void widgetDisposed(DisposeEvent e) {
- mModel.removeTreeChangeListener(PropertyViewer.this);
- }
- };
-
- // If the window gets too small, hide the data, otherwise SWT throws an
- // ERROR.
-
- private ControlListener mControlListener = new ControlAdapter() {
- private boolean noInput = false;
-
- private boolean noHeader = false;
-
- @Override
- public void controlResized(ControlEvent e) {
- if (getBounds().height <= 20) {
- mTree.setHeaderVisible(false);
- noHeader = true;
- } else if (noHeader) {
- mTree.setHeaderVisible(true);
- noHeader = false;
- }
- if (getBounds().height <= 38) {
- mTreeViewer.setInput(null);
- noInput = true;
- } else if (noInput) {
- mTreeViewer.setInput(mModel);
- noInput = false;
- }
- }
- };
-
- @Override
- public void selectionChanged() {
- synchronized (this) {
- mSelectedNode = mModel.getSelection();
- }
- doRefresh();
- }
-
- @Override
- public void treeChanged() {
- synchronized (this) {
- mSelectedNode = mModel.getSelection();
- }
- doRefresh();
- }
-
- @Override
- public void viewportChanged() {
- // pass
- }
-
- @Override
- public void zoomChanged() {
- // pass
- }
-
- private void doRefresh() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- mTreeViewer.refresh();
- }
- });
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/TreeView.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/TreeView.java
deleted file mode 100644
index 9449ccc..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/TreeView.java
+++ /dev/null
@@ -1,1086 +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.hierarchyviewerlib.ui;
-
-import com.android.ddmuilib.ImageLoader;
-import com.android.hierarchyviewerlib.HierarchyViewerDirector;
-import com.android.hierarchyviewerlib.device.ViewNode.ProfileRating;
-import com.android.hierarchyviewerlib.models.TreeViewModel;
-import com.android.hierarchyviewerlib.models.TreeViewModel.ITreeChangeListener;
-import com.android.hierarchyviewerlib.ui.util.DrawableViewNode;
-import com.android.hierarchyviewerlib.ui.util.DrawableViewNode.Point;
-import com.android.hierarchyviewerlib.ui.util.DrawableViewNode.Rectangle;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.KeyListener;
-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.Color;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Path;
-import org.eclipse.swt.graphics.RGB;
-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;
-
-import java.text.DecimalFormat;
-
-public class TreeView extends Canvas implements ITreeChangeListener {
-
- private TreeViewModel mModel;
-
- private DrawableViewNode mTree;
-
- private DrawableViewNode mSelectedNode;
-
- private Rectangle mViewport;
-
- private Transform mTransform;
-
- private Transform mInverse;
-
- private double mZoom;
-
- private Point mLastPoint;
-
- private boolean mAlreadySelectedOnMouseDown;
-
- private boolean mDoubleClicked;
-
- private boolean mNodeMoved;
-
- private DrawableViewNode mDraggedNode;
-
- public static final int LINE_PADDING = 10;
-
- public static final float BEZIER_FRACTION = 0.35f;
-
- private static Image sRedImage;
-
- private static Image sYellowImage;
-
- private static Image sGreenImage;
-
- private static Image sNotSelectedImage;
-
- private static Image sSelectedImage;
-
- private static Image sFilteredImage;
-
- private static Image sFilteredSelectedImage;
-
- private static Font sSystemFont;
-
- private Color mBoxColor;
-
- private Color mTextBackgroundColor;
-
- private Rectangle mSelectedRectangleLocation;
-
- private Point mButtonCenter;
-
- private static final int BUTTON_SIZE = 13;
-
- private Image mScaledSelectedImage;
-
- private boolean mButtonClicked;
-
- private DrawableViewNode mLastDrawnSelectedViewNode;
-
- // The profile-image box needs to be moved to,
- // so add some dragging leeway.
- private static final int DRAG_LEEWAY = 220;
-
- // Profile-image box constants
- private static final int RECT_WIDTH = 190;
-
- private static final int RECT_HEIGHT = 224;
-
- private static final int BUTTON_RIGHT_OFFSET = 5;
-
- private static final int BUTTON_TOP_OFFSET = 5;
-
- private static final int IMAGE_WIDTH = 125;
-
- private static final int IMAGE_HEIGHT = 120;
-
- private static final int IMAGE_OFFSET = 6;
-
- private static final int IMAGE_ROUNDING = 8;
-
- private static final int RECTANGLE_SIZE = 5;
-
- private static final int TEXT_SIDE_OFFSET = 8;
-
- private static final int TEXT_TOP_OFFSET = 4;
-
- private static final int TEXT_SPACING = 2;
-
- private static final int TEXT_ROUNDING = 20;
-
- public TreeView(Composite parent) {
- super(parent, SWT.NONE);
-
- mModel = TreeViewModel.getModel();
- mModel.addTreeChangeListener(this);
-
- addPaintListener(mPaintListener);
- addMouseListener(mMouseListener);
- addMouseMoveListener(mMouseMoveListener);
- addMouseWheelListener(mMouseWheelListener);
- addListener(SWT.Resize, mResizeListener);
- addDisposeListener(mDisposeListener);
- addKeyListener(mKeyListener);
-
- loadResources();
-
- mTransform = new Transform(Display.getDefault());
- mInverse = new Transform(Display.getDefault());
-
- loadAllData();
- }
-
- private void loadResources() {
- ImageLoader loader = ImageLoader.getLoader(this.getClass());
- sRedImage = loader.loadImage("red.png", Display.getDefault()); //$NON-NLS-1$
- sYellowImage = loader.loadImage("yellow.png", Display.getDefault()); //$NON-NLS-1$
- sGreenImage = loader.loadImage("green.png", Display.getDefault()); //$NON-NLS-1$
- sNotSelectedImage = loader.loadImage("not-selected.png", Display.getDefault()); //$NON-NLS-1$
- sSelectedImage = loader.loadImage("selected.png", Display.getDefault()); //$NON-NLS-1$
- sFilteredImage = loader.loadImage("filtered.png", Display.getDefault()); //$NON-NLS-1$
- sFilteredSelectedImage = loader.loadImage("selected-filtered.png", Display.getDefault()); //$NON-NLS-1$
- mBoxColor = new Color(Display.getDefault(), new RGB(225, 225, 225));
- mTextBackgroundColor = new Color(Display.getDefault(), new RGB(82, 82, 82));
- if (mScaledSelectedImage != null) {
- mScaledSelectedImage.dispose();
- }
- sSystemFont = Display.getDefault().getSystemFont();
- }
-
- private DisposeListener mDisposeListener = new DisposeListener() {
- @Override
- public void widgetDisposed(DisposeEvent e) {
- mModel.removeTreeChangeListener(TreeView.this);
- mTransform.dispose();
- mInverse.dispose();
- mBoxColor.dispose();
- mTextBackgroundColor.dispose();
- if (mTree != null) {
- mModel.setViewport(null);
- }
- }
- };
-
- private Listener mResizeListener = new Listener() {
- @Override
- public void handleEvent(Event e) {
- synchronized (TreeView.this) {
- if (mTree != null && mViewport != null) {
-
- // Keep the center in the same place.
- Point viewCenter =
- new Point(mViewport.x + mViewport.width / 2, mViewport.y + mViewport.height
- / 2);
- mViewport.width = getBounds().width / mZoom;
- mViewport.height = getBounds().height / mZoom;
- mViewport.x = viewCenter.x - mViewport.width / 2;
- mViewport.y = viewCenter.y - mViewport.height / 2;
- }
- }
- if (mViewport != null) {
- mModel.setViewport(mViewport);
- }
- }
- };
-
- private KeyListener mKeyListener = new KeyListener() {
-
- @Override
- public void keyPressed(KeyEvent e) {
- boolean selectionChanged = false;
- DrawableViewNode clickedNode = null;
- synchronized (TreeView.this) {
- if (mTree != null && mViewport != null && mSelectedNode != null) {
- switch (e.keyCode) {
- case SWT.ARROW_LEFT:
- if (mSelectedNode.parent != null) {
- mSelectedNode = mSelectedNode.parent;
- selectionChanged = true;
- }
- break;
- case SWT.ARROW_UP:
-
- // On up and down, it is cool to go up and down only
- // the leaf nodes.
- // It goes well with the layout viewer
- DrawableViewNode currentNode = mSelectedNode;
- while (currentNode.parent != null && currentNode.viewNode.index == 0) {
- currentNode = currentNode.parent;
- }
- if (currentNode.parent != null) {
- selectionChanged = true;
- currentNode =
- currentNode.parent.children
- .get(currentNode.viewNode.index - 1);
- while (currentNode.children.size() != 0) {
- currentNode =
- currentNode.children
- .get(currentNode.children.size() - 1);
- }
- }
- if (selectionChanged) {
- mSelectedNode = currentNode;
- }
- break;
- case SWT.ARROW_DOWN:
- currentNode = mSelectedNode;
- while (currentNode.parent != null
- && currentNode.viewNode.index + 1 == currentNode.parent.children
- .size()) {
- currentNode = currentNode.parent;
- }
- if (currentNode.parent != null) {
- selectionChanged = true;
- currentNode =
- currentNode.parent.children
- .get(currentNode.viewNode.index + 1);
- while (currentNode.children.size() != 0) {
- currentNode = currentNode.children.get(0);
- }
- }
- if (selectionChanged) {
- mSelectedNode = currentNode;
- }
- break;
- case SWT.ARROW_RIGHT:
- DrawableViewNode rightNode = null;
- double mostOverlap = 0;
- final int N = mSelectedNode.children.size();
-
- // We consider all the children and pick the one
- // who's tree overlaps the most.
- for (int i = 0; i < N; i++) {
- DrawableViewNode child = mSelectedNode.children.get(i);
- DrawableViewNode topMostChild = child;
- while (topMostChild.children.size() != 0) {
- topMostChild = topMostChild.children.get(0);
- }
- double overlap =
- Math.min(DrawableViewNode.NODE_HEIGHT, Math.min(
- mSelectedNode.top + DrawableViewNode.NODE_HEIGHT
- - topMostChild.top, topMostChild.top
- + child.treeHeight - mSelectedNode.top));
- if (overlap > mostOverlap) {
- mostOverlap = overlap;
- rightNode = child;
- }
- }
- if (rightNode != null) {
- mSelectedNode = rightNode;
- selectionChanged = true;
- }
- break;
- case SWT.CR:
- clickedNode = mSelectedNode;
- break;
- }
- }
- }
- if (selectionChanged) {
- mModel.setSelection(mSelectedNode);
- }
- if (clickedNode != null) {
- HierarchyViewerDirector.getDirector().showCapture(getShell(), clickedNode.viewNode);
- }
- }
-
- @Override
- public void keyReleased(KeyEvent e) {
- }
- };
-
- private MouseListener mMouseListener = new MouseListener() {
-
- @Override
- public void mouseDoubleClick(MouseEvent e) {
- DrawableViewNode clickedNode = null;
- synchronized (TreeView.this) {
- if (mTree != null && mViewport != null) {
- Point pt = transformPoint(e.x, e.y);
- clickedNode = mTree.getSelected(pt.x, pt.y);
- }
- }
- if (clickedNode != null) {
- HierarchyViewerDirector.getDirector().showCapture(getShell(), clickedNode.viewNode);
- mDoubleClicked = true;
- }
- }
-
- @Override
- public void mouseDown(MouseEvent e) {
- boolean selectionChanged = false;
- synchronized (TreeView.this) {
- if (mTree != null && mViewport != null) {
- Point pt = transformPoint(e.x, e.y);
-
- // Ignore profiling rectangle, except for...
- if (mSelectedRectangleLocation != null
- && pt.x >= mSelectedRectangleLocation.x
- && pt.x < mSelectedRectangleLocation.x
- + mSelectedRectangleLocation.width
- && pt.y >= mSelectedRectangleLocation.y
- && pt.y < mSelectedRectangleLocation.y
- + mSelectedRectangleLocation.height) {
-
- // the small button!
- if ((pt.x - mButtonCenter.x) * (pt.x - mButtonCenter.x)
- + (pt.y - mButtonCenter.y) * (pt.y - mButtonCenter.y) <= (BUTTON_SIZE * BUTTON_SIZE) / 4) {
- mButtonClicked = true;
- doRedraw();
- }
- return;
- }
- mDraggedNode = mTree.getSelected(pt.x, pt.y);
-
- // Update the selection.
- if (mDraggedNode != null && mDraggedNode != mSelectedNode) {
- mSelectedNode = mDraggedNode;
- selectionChanged = true;
- mAlreadySelectedOnMouseDown = false;
- } else if (mDraggedNode != null) {
- mAlreadySelectedOnMouseDown = true;
- }
-
- // Can't drag the root.
- if (mDraggedNode == mTree) {
- mDraggedNode = null;
- }
-
- if (mDraggedNode != null) {
- mLastPoint = pt;
- } else {
- mLastPoint = new Point(e.x, e.y);
- }
- mNodeMoved = false;
- mDoubleClicked = false;
- }
- }
- if (selectionChanged) {
- mModel.setSelection(mSelectedNode);
- }
- }
-
- @Override
- public void mouseUp(MouseEvent e) {
- boolean redraw = false;
- boolean redrawButton = false;
- boolean viewportChanged = false;
- boolean selectionChanged = false;
- synchronized (TreeView.this) {
- if (mTree != null && mViewport != null && mLastPoint != null) {
- if (mDraggedNode == null) {
- // The viewport moves.
- handleMouseDrag(new Point(e.x, e.y));
- viewportChanged = true;
- } else {
- // The nodes move.
- handleMouseDrag(transformPoint(e.x, e.y));
- }
-
- // Deselect on the second click...
- // This is in the mouse up, because mouse up happens after a
- // double click event.
- // During a double click, we don't want to deselect.
- Point pt = transformPoint(e.x, e.y);
- DrawableViewNode mouseUpOn = mTree.getSelected(pt.x, pt.y);
- if (mouseUpOn != null && mouseUpOn == mSelectedNode
- && mAlreadySelectedOnMouseDown && !mNodeMoved && !mDoubleClicked) {
- mSelectedNode = null;
- selectionChanged = true;
- }
- mLastPoint = null;
- mDraggedNode = null;
- redraw = true;
- }
-
- // Just clicked the button here.
- if (mButtonClicked) {
- HierarchyViewerDirector.getDirector().showCapture(getShell(),
- mSelectedNode.viewNode);
- mButtonClicked = false;
- redrawButton = true;
- }
- }
-
- // Complicated.
- if (viewportChanged) {
- mModel.setViewport(mViewport);
- } else if (redraw) {
- mModel.removeTreeChangeListener(TreeView.this);
- mModel.notifyViewportChanged();
- if (selectionChanged) {
- mModel.setSelection(mSelectedNode);
- }
- mModel.addTreeChangeListener(TreeView.this);
- doRedraw();
- } else if (redrawButton) {
- doRedraw();
- }
- }
-
- };
-
- private MouseMoveListener mMouseMoveListener = new MouseMoveListener() {
- @Override
- public void mouseMove(MouseEvent e) {
- boolean redraw = false;
- boolean viewportChanged = false;
- synchronized (TreeView.this) {
- if (mTree != null && mViewport != null && mLastPoint != null) {
- if (mDraggedNode == null) {
- handleMouseDrag(new Point(e.x, e.y));
- viewportChanged = true;
- } else {
- handleMouseDrag(transformPoint(e.x, e.y));
- }
- redraw = true;
- }
- }
- if (viewportChanged) {
- mModel.setViewport(mViewport);
- } else if (redraw) {
- mModel.removeTreeChangeListener(TreeView.this);
- mModel.notifyViewportChanged();
- mModel.addTreeChangeListener(TreeView.this);
- doRedraw();
- }
- }
- };
-
- private void handleMouseDrag(Point pt) {
-
- // Case 1: a node is dragged. DrawableViewNode knows how to handle this.
- if (mDraggedNode != null) {
- if (mLastPoint.y - pt.y != 0) {
- mNodeMoved = true;
- }
- mDraggedNode.move(mLastPoint.y - pt.y);
- mLastPoint = pt;
- return;
- }
-
- // Case 2: the viewport is dragged. We have to make sure we respect the
- // bounds - don't let the user drag way out... + some leeway for the
- // profiling box.
- double xDif = (mLastPoint.x - pt.x) / mZoom;
- double yDif = (mLastPoint.y - pt.y) / mZoom;
-
- double treeX = mTree.bounds.x - DRAG_LEEWAY;
- double treeY = mTree.bounds.y - DRAG_LEEWAY;
- double treeWidth = mTree.bounds.width + 2 * DRAG_LEEWAY;
- double treeHeight = mTree.bounds.height + 2 * DRAG_LEEWAY;
-
- if (mViewport.width > treeWidth) {
- if (xDif < 0 && mViewport.x + mViewport.width > treeX + treeWidth) {
- mViewport.x = Math.max(mViewport.x + xDif, treeX + treeWidth - mViewport.width);
- } else if (xDif > 0 && mViewport.x < treeX) {
- mViewport.x = Math.min(mViewport.x + xDif, treeX);
- }
- } else {
- if (xDif < 0 && mViewport.x > treeX) {
- mViewport.x = Math.max(mViewport.x + xDif, treeX);
- } else if (xDif > 0 && mViewport.x + mViewport.width < treeX + treeWidth) {
- mViewport.x = Math.min(mViewport.x + xDif, treeX + treeWidth - mViewport.width);
- }
- }
- if (mViewport.height > treeHeight) {
- if (yDif < 0 && mViewport.y + mViewport.height > treeY + treeHeight) {
- mViewport.y = Math.max(mViewport.y + yDif, treeY + treeHeight - mViewport.height);
- } else if (yDif > 0 && mViewport.y < treeY) {
- mViewport.y = Math.min(mViewport.y + yDif, treeY);
- }
- } else {
- if (yDif < 0 && mViewport.y > treeY) {
- mViewport.y = Math.max(mViewport.y + yDif, treeY);
- } else if (yDif > 0 && mViewport.y + mViewport.height < treeY + treeHeight) {
- mViewport.y = Math.min(mViewport.y + yDif, treeY + treeHeight - mViewport.height);
- }
- }
- mLastPoint = pt;
- }
-
- private Point transformPoint(double x, double y) {
- float[] pt = {
- (float) x, (float) y
- };
- mInverse.transform(pt);
- return new Point(pt[0], pt[1]);
- }
-
- private MouseWheelListener mMouseWheelListener = new MouseWheelListener() {
- @Override
- public void mouseScrolled(MouseEvent e) {
- Point zoomPoint = null;
- synchronized (TreeView.this) {
- if (mTree != null && mViewport != null) {
- mZoom += Math.ceil(e.count / 3.0) * 0.1;
- zoomPoint = transformPoint(e.x, e.y);
- }
- }
- if (zoomPoint != null) {
- mModel.zoomOnPoint(mZoom, zoomPoint);
- }
- }
- };
-
- private PaintListener mPaintListener = new PaintListener() {
- @Override
- public void paintControl(PaintEvent e) {
- synchronized (TreeView.this) {
- e.gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
- e.gc.fillRectangle(0, 0, getBounds().width, getBounds().height);
- if (mTree != null && mViewport != null) {
-
- // Easy stuff!
- e.gc.setTransform(mTransform);
- e.gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
- Path connectionPath = new Path(Display.getDefault());
- paintRecursive(e.gc, mTransform, mTree, mSelectedNode, connectionPath);
- e.gc.drawPath(connectionPath);
- connectionPath.dispose();
-
- // Draw the profiling box.
- if (mSelectedNode != null) {
-
- e.gc.setAlpha(200);
-
- // Draw the little triangle
- int x = mSelectedNode.left + DrawableViewNode.NODE_WIDTH / 2;
- int y = (int) mSelectedNode.top + 4;
- e.gc.setBackground(mBoxColor);
- e.gc.fillPolygon(new int[] {
- x, y, x - 11, y - 11, x + 11, y - 11
- });
-
- // Draw the rectangle and update the location.
- y -= 10 + RECT_HEIGHT;
- e.gc.fillRoundRectangle(x - RECT_WIDTH / 2, y, RECT_WIDTH, RECT_HEIGHT, 30,
- 30);
- mSelectedRectangleLocation =
- new Rectangle(x - RECT_WIDTH / 2, y, RECT_WIDTH, RECT_HEIGHT);
-
- e.gc.setAlpha(255);
-
- // Draw the button
- mButtonCenter =
- new Point(x - BUTTON_RIGHT_OFFSET + (RECT_WIDTH - BUTTON_SIZE) / 2,
- y + BUTTON_TOP_OFFSET + BUTTON_SIZE / 2);
-
- if (mButtonClicked) {
- e.gc
- .setBackground(Display.getDefault().getSystemColor(
- SWT.COLOR_BLACK));
- } else {
- e.gc.setBackground(mTextBackgroundColor);
-
- }
- e.gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
-
- e.gc.fillOval(x + RECT_WIDTH / 2 - BUTTON_RIGHT_OFFSET - BUTTON_SIZE, y
- + BUTTON_TOP_OFFSET, BUTTON_SIZE, BUTTON_SIZE);
-
- e.gc.drawRectangle(x - BUTTON_RIGHT_OFFSET
- + (RECT_WIDTH - BUTTON_SIZE - RECTANGLE_SIZE) / 2 - 1, y
- + BUTTON_TOP_OFFSET + (BUTTON_SIZE - RECTANGLE_SIZE) / 2,
- RECTANGLE_SIZE + 1, RECTANGLE_SIZE);
-
- y += 15;
-
- // If there is an image, draw it.
- if (mSelectedNode.viewNode.image != null
- && mSelectedNode.viewNode.image.getBounds().height != 1
- && mSelectedNode.viewNode.image.getBounds().width != 1) {
-
- // Scaling the image to the right size takes lots of
- // time, so we want to do it only once.
-
- // If the selection changed, get rid of the old
- // image.
- if (mLastDrawnSelectedViewNode != mSelectedNode) {
- if (mScaledSelectedImage != null) {
- mScaledSelectedImage.dispose();
- mScaledSelectedImage = null;
- }
- mLastDrawnSelectedViewNode = mSelectedNode;
- }
-
- if (mScaledSelectedImage == null) {
- double ratio =
- 1.0 * mSelectedNode.viewNode.image.getBounds().width
- / mSelectedNode.viewNode.image.getBounds().height;
- int newWidth, newHeight;
- if (ratio > 1.0 * IMAGE_WIDTH / IMAGE_HEIGHT) {
- newWidth =
- Math.min(IMAGE_WIDTH, mSelectedNode.viewNode.image
- .getBounds().width);
- newHeight = (int) (newWidth / ratio);
- } else {
- newHeight =
- Math.min(IMAGE_HEIGHT, mSelectedNode.viewNode.image
- .getBounds().height);
- newWidth = (int) (newHeight * ratio);
- }
-
- // Interesting note... We make the image twice
- // the needed size so that there is better
- // resolution under zoom.
- newWidth = Math.max(newWidth * 2, 1);
- newHeight = Math.max(newHeight * 2, 1);
- mScaledSelectedImage =
- new Image(Display.getDefault(), newWidth, newHeight);
- GC gc = new GC(mScaledSelectedImage);
- gc.setBackground(mTextBackgroundColor);
- gc.fillRectangle(0, 0, newWidth, newHeight);
- gc.drawImage(mSelectedNode.viewNode.image, 0, 0,
- mSelectedNode.viewNode.image.getBounds().width,
- mSelectedNode.viewNode.image.getBounds().height, 0, 0,
- newWidth, newHeight);
- gc.dispose();
- }
-
- // Draw the background rectangle
- e.gc.setBackground(mTextBackgroundColor);
- e.gc.fillRoundRectangle(x - mScaledSelectedImage.getBounds().width / 4
- - IMAGE_OFFSET, y
- + (IMAGE_HEIGHT - mScaledSelectedImage.getBounds().height / 2)
- / 2 - IMAGE_OFFSET, mScaledSelectedImage.getBounds().width / 2
- + 2 * IMAGE_OFFSET, mScaledSelectedImage.getBounds().height / 2
- + 2 * IMAGE_OFFSET, IMAGE_ROUNDING, IMAGE_ROUNDING);
-
- // Under max zoom, we want the image to be
- // untransformed. So, get back to the identity
- // transform.
- int imageX = x - mScaledSelectedImage.getBounds().width / 4;
- int imageY =
- y
- + (IMAGE_HEIGHT - mScaledSelectedImage.getBounds().height / 2)
- / 2;
-
- Transform untransformedTransform = new Transform(Display.getDefault());
- e.gc.setTransform(untransformedTransform);
- float[] pt = new float[] {
- imageX, imageY
- };
- mTransform.transform(pt);
- e.gc.drawImage(mScaledSelectedImage, 0, 0, mScaledSelectedImage
- .getBounds().width, mScaledSelectedImage.getBounds().height,
- (int) pt[0], (int) pt[1], (int) (mScaledSelectedImage
- .getBounds().width
- * mZoom / 2),
- (int) (mScaledSelectedImage.getBounds().height * mZoom / 2));
- untransformedTransform.dispose();
- e.gc.setTransform(mTransform);
- }
-
- // Text stuff
-
- y += IMAGE_HEIGHT;
- y += 10;
- Font font = getFont(8, false);
- e.gc.setFont(font);
-
- String text =
- mSelectedNode.viewNode.viewCount + " view"
- + (mSelectedNode.viewNode.viewCount != 1 ? "s" : "");
- DecimalFormat formatter = new DecimalFormat("0.000");
-
- String measureText =
- "Measure: "
- + (mSelectedNode.viewNode.measureTime != -1 ? formatter
- .format(mSelectedNode.viewNode.measureTime)
- + " ms" : "n/a");
- String layoutText =
- "Layout: "
- + (mSelectedNode.viewNode.layoutTime != -1 ? formatter
- .format(mSelectedNode.viewNode.layoutTime)
- + " ms" : "n/a");
- String drawText =
- "Draw: "
- + (mSelectedNode.viewNode.drawTime != -1 ? formatter
- .format(mSelectedNode.viewNode.drawTime)
- + " ms" : "n/a");
-
- org.eclipse.swt.graphics.Point titleExtent = e.gc.stringExtent(text);
- org.eclipse.swt.graphics.Point measureExtent =
- e.gc.stringExtent(measureText);
- org.eclipse.swt.graphics.Point layoutExtent = e.gc.stringExtent(layoutText);
- org.eclipse.swt.graphics.Point drawExtent = e.gc.stringExtent(drawText);
- int boxWidth =
- Math.max(titleExtent.x, Math.max(measureExtent.x, Math.max(
- layoutExtent.x, drawExtent.x)))
- + 2 * TEXT_SIDE_OFFSET;
- int boxHeight =
- titleExtent.y + TEXT_SPACING + measureExtent.y + TEXT_SPACING
- + layoutExtent.y + TEXT_SPACING + drawExtent.y + 2
- * TEXT_TOP_OFFSET;
-
- e.gc.setBackground(mTextBackgroundColor);
- e.gc.fillRoundRectangle(x - boxWidth / 2, y, boxWidth, boxHeight,
- TEXT_ROUNDING, TEXT_ROUNDING);
-
- e.gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
-
- y += TEXT_TOP_OFFSET;
-
- e.gc.drawText(text, x - titleExtent.x / 2, y, true);
-
- x -= boxWidth / 2;
- x += TEXT_SIDE_OFFSET;
-
- y += titleExtent.y + TEXT_SPACING;
-
- e.gc.drawText(measureText, x, y, true);
-
- y += measureExtent.y + TEXT_SPACING;
-
- e.gc.drawText(layoutText, x, y, true);
-
- y += layoutExtent.y + TEXT_SPACING;
-
- e.gc.drawText(drawText, x, y, true);
-
- font.dispose();
- } else {
- mSelectedRectangleLocation = null;
- mButtonCenter = null;
- }
- }
- }
- }
- };
-
- private static void paintRecursive(GC gc, Transform transform, DrawableViewNode node,
- DrawableViewNode selectedNode, Path connectionPath) {
- if (selectedNode == node && node.viewNode.filtered) {
- gc.drawImage(sFilteredSelectedImage, node.left, (int) Math.round(node.top));
- } else if (selectedNode == node) {
- gc.drawImage(sSelectedImage, node.left, (int) Math.round(node.top));
- } else if (node.viewNode.filtered) {
- gc.drawImage(sFilteredImage, node.left, (int) Math.round(node.top));
- } else {
- gc.drawImage(sNotSelectedImage, node.left, (int) Math.round(node.top));
- }
-
- int fontHeight = gc.getFontMetrics().getHeight();
-
- // Draw the text...
- int contentWidth =
- DrawableViewNode.NODE_WIDTH - 2 * DrawableViewNode.CONTENT_LEFT_RIGHT_PADDING;
- String name = node.viewNode.name;
- int dotIndex = name.lastIndexOf('.');
- if (dotIndex != -1) {
- name = name.substring(dotIndex + 1);
- }
- double x = node.left + DrawableViewNode.CONTENT_LEFT_RIGHT_PADDING;
- double y = node.top + DrawableViewNode.CONTENT_TOP_BOTTOM_PADDING;
- drawTextInArea(gc, transform, name, x, y, contentWidth, fontHeight, 10, true);
-
- y += fontHeight + DrawableViewNode.CONTENT_INTER_PADDING;
-
- drawTextInArea(gc, transform, "@" + node.viewNode.hashCode, x, y, contentWidth, fontHeight,
- 8, false);
-
- y += fontHeight + DrawableViewNode.CONTENT_INTER_PADDING;
- if (!node.viewNode.id.equals("NO_ID")) {
- drawTextInArea(gc, transform, node.viewNode.id, x, y, contentWidth, fontHeight, 8,
- false);
- }
-
- if (node.viewNode.measureRating != ProfileRating.NONE) {
- y =
- node.top + DrawableViewNode.NODE_HEIGHT
- - DrawableViewNode.CONTENT_TOP_BOTTOM_PADDING
- - sRedImage.getBounds().height;
- x +=
- (contentWidth - (sRedImage.getBounds().width * 3 + 2 * DrawableViewNode.CONTENT_INTER_PADDING)) / 2;
- switch (node.viewNode.measureRating) {
- case GREEN:
- gc.drawImage(sGreenImage, (int) x, (int) y);
- break;
- case YELLOW:
- gc.drawImage(sYellowImage, (int) x, (int) y);
- break;
- case RED:
- gc.drawImage(sRedImage, (int) x, (int) y);
- break;
- }
-
- x += sRedImage.getBounds().width + DrawableViewNode.CONTENT_INTER_PADDING;
- switch (node.viewNode.layoutRating) {
- case GREEN:
- gc.drawImage(sGreenImage, (int) x, (int) y);
- break;
- case YELLOW:
- gc.drawImage(sYellowImage, (int) x, (int) y);
- break;
- case RED:
- gc.drawImage(sRedImage, (int) x, (int) y);
- break;
- }
-
- x += sRedImage.getBounds().width + DrawableViewNode.CONTENT_INTER_PADDING;
- switch (node.viewNode.drawRating) {
- case GREEN:
- gc.drawImage(sGreenImage, (int) x, (int) y);
- break;
- case YELLOW:
- gc.drawImage(sYellowImage, (int) x, (int) y);
- break;
- case RED:
- gc.drawImage(sRedImage, (int) x, (int) y);
- break;
- }
- }
-
- org.eclipse.swt.graphics.Point indexExtent =
- gc.stringExtent(Integer.toString(node.viewNode.index));
- x =
- node.left + DrawableViewNode.NODE_WIDTH - DrawableViewNode.INDEX_PADDING
- - indexExtent.x;
- y =
- node.top + DrawableViewNode.NODE_HEIGHT - DrawableViewNode.INDEX_PADDING
- - indexExtent.y;
- gc.drawText(Integer.toString(node.viewNode.index), (int) x, (int) y, SWT.DRAW_TRANSPARENT);
-
- int N = node.children.size();
- if (N == 0) {
- return;
- }
- float childSpacing = (1.0f * (DrawableViewNode.NODE_HEIGHT - 2 * LINE_PADDING)) / N;
- for (int i = 0; i < N; i++) {
- DrawableViewNode child = node.children.get(i);
- paintRecursive(gc, transform, child, selectedNode, connectionPath);
- float x1 = node.left + DrawableViewNode.NODE_WIDTH;
- float y1 = (float) node.top + LINE_PADDING + childSpacing * i + childSpacing / 2;
- float x2 = child.left;
- float y2 = (float) child.top + DrawableViewNode.NODE_HEIGHT / 2.0f;
- float cx1 = x1 + BEZIER_FRACTION * DrawableViewNode.PARENT_CHILD_SPACING;
- float cy1 = y1;
- float cx2 = x2 - BEZIER_FRACTION * DrawableViewNode.PARENT_CHILD_SPACING;
- float cy2 = y2;
- connectionPath.moveTo(x1, y1);
- connectionPath.cubicTo(cx1, cy1, cx2, cy2, x2, y2);
- }
- }
-
- private static void drawTextInArea(GC gc, Transform transform, String text, double x, double y,
- double width, double height, int fontSize, boolean bold) {
-
- Font oldFont = gc.getFont();
-
- Font newFont = getFont(fontSize, bold);
- gc.setFont(newFont);
-
- org.eclipse.swt.graphics.Point extent = gc.stringExtent(text);
-
- if (extent.x > width) {
- // Oh no... we need to scale it.
- double scale = width / extent.x;
- float[] transformElements = new float[6];
- transform.getElements(transformElements);
- transform.scale((float) scale, (float) scale);
- gc.setTransform(transform);
-
- x /= scale;
- y /= scale;
- y += (extent.y / scale - extent.y) / 2;
-
- gc.drawText(text, (int) x, (int) y, SWT.DRAW_TRANSPARENT);
-
- transform.setElements(transformElements[0], transformElements[1], transformElements[2],
- transformElements[3], transformElements[4], transformElements[5]);
- gc.setTransform(transform);
- } else {
- gc.drawText(text, (int) (x + (width - extent.x) / 2),
- (int) (y + (height - extent.y) / 2), SWT.DRAW_TRANSPARENT);
- }
- gc.setFont(oldFont);
- newFont.dispose();
-
- }
-
- public static Image paintToImage(DrawableViewNode tree) {
- Image image =
- new Image(Display.getDefault(), (int) Math.ceil(tree.bounds.width), (int) Math
- .ceil(tree.bounds.height));
-
- Transform transform = new Transform(Display.getDefault());
- transform.identity();
- transform.translate((float) -tree.bounds.x, (float) -tree.bounds.y);
- Path connectionPath = new Path(Display.getDefault());
- GC gc = new GC(image);
-
- // Can't use Display.getDefault().getSystemColor in a non-UI thread.
- Color white = new Color(Display.getDefault(), 255, 255, 255);
- Color black = new Color(Display.getDefault(), 0, 0, 0);
- gc.setForeground(white);
- gc.setBackground(black);
- gc.fillRectangle(0, 0, image.getBounds().width, image.getBounds().height);
- gc.setTransform(transform);
- paintRecursive(gc, transform, tree, null, connectionPath);
- gc.drawPath(connectionPath);
- gc.dispose();
- connectionPath.dispose();
- white.dispose();
- black.dispose();
- return image;
- }
-
- private static Font getFont(int size, boolean bold) {
- FontData[] fontData = sSystemFont.getFontData();
- for (int i = 0; i < fontData.length; i++) {
- fontData[i].setHeight(size);
- if (bold) {
- fontData[i].setStyle(SWT.BOLD);
- }
- }
- return new Font(Display.getDefault(), fontData);
- }
-
- private void doRedraw() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- redraw();
- }
- });
- }
-
- public void loadAllData() {
- boolean newViewport = mViewport == null;
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- synchronized (this) {
- mTree = mModel.getTree();
- mSelectedNode = mModel.getSelection();
- mViewport = mModel.getViewport();
- mZoom = mModel.getZoom();
- if (mTree != null && mViewport == null) {
- mViewport =
- new Rectangle(0, mTree.top + DrawableViewNode.NODE_HEIGHT / 2
- - getBounds().height / 2, getBounds().width,
- getBounds().height);
- } else {
- setTransform();
- }
- }
- }
- });
- if (newViewport) {
- mModel.setViewport(mViewport);
- }
- }
-
- // Fickle behaviour... When a new tree is loaded, the model doesn't know
- // about the viewport until it passes through here.
- @Override
- public void treeChanged() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- synchronized (this) {
- mTree = mModel.getTree();
- mSelectedNode = mModel.getSelection();
- if (mTree == null) {
- mViewport = null;
- } else {
- mViewport =
- new Rectangle(0, mTree.top + DrawableViewNode.NODE_HEIGHT / 2
- - getBounds().height / 2, getBounds().width,
- getBounds().height);
- }
- }
- }
- });
- if (mViewport != null) {
- mModel.setViewport(mViewport);
- } else {
- doRedraw();
- }
- }
-
- private void setTransform() {
- if (mViewport != null && mTree != null) {
- // Set the transform.
- mTransform.identity();
- mInverse.identity();
-
- mTransform.scale((float) mZoom, (float) mZoom);
- mInverse.scale((float) mZoom, (float) mZoom);
- mTransform.translate((float) -mViewport.x, (float) -mViewport.y);
- mInverse.translate((float) -mViewport.x, (float) -mViewport.y);
- mInverse.invert();
- }
- }
-
- // Note the syncExec and then synchronized... It avoids deadlock
- @Override
- public void viewportChanged() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- synchronized (this) {
- mViewport = mModel.getViewport();
- mZoom = mModel.getZoom();
- setTransform();
- }
- }
- });
- doRedraw();
- }
-
- @Override
- public void zoomChanged() {
- viewportChanged();
- }
-
- @Override
- public void selectionChanged() {
- synchronized (this) {
- mSelectedNode = mModel.getSelection();
- if (mSelectedNode != null && mSelectedNode.viewNode.image == null) {
- HierarchyViewerDirector.getDirector()
- .loadCaptureInBackground(mSelectedNode.viewNode);
- }
- }
- doRedraw();
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/TreeViewControls.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/TreeViewControls.java
deleted file mode 100644
index fc03f13..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/TreeViewControls.java
+++ /dev/null
@@ -1,153 +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.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() {
- @Override
- public void widgetDisposed(DisposeEvent e) {
- TreeViewModel.getModel().removeTreeChangeListener(TreeViewControls.this);
- }
- };
-
- private SelectionListener mZoomSliderSelectionListener = new SelectionListener() {
- private int oldValue;
-
- @Override
- public void widgetDefaultSelected(SelectionEvent e) {
- // pass
- }
-
- @Override
- 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() {
- @Override
- public void modifyText(ModifyEvent e) {
- HierarchyViewerDirector.getDirector().filterNodes(mFilterText.getText());
- }
- };
-
- @Override
- public void selectionChanged() {
- // pass
- }
-
- @Override
- public void treeChanged() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- if (TreeViewModel.getModel().getTree() != null) {
- mZoomSlider.setSelection((int) Math
- .round(TreeViewModel.getModel().getZoom() * 10));
- }
- mFilterText.setText(""); //$NON-NLS-1$
- }
- });
- }
-
- @Override
- public void viewportChanged() {
- // pass
- }
-
- @Override
- public void zoomChanged() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- mZoomSlider.setSelection((int) Math.round(TreeViewModel.getModel().getZoom() * 10));
- }
- });
- };
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/TreeViewOverview.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/TreeViewOverview.java
deleted file mode 100644
index bbff48c..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/TreeViewOverview.java
+++ /dev/null
@@ -1,397 +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.hierarchyviewerlib.ui;
-
-import com.android.ddmuilib.ImageLoader;
-import com.android.hierarchyviewerlib.models.TreeViewModel;
-import com.android.hierarchyviewerlib.models.TreeViewModel.ITreeChangeListener;
-import com.android.hierarchyviewerlib.ui.util.DrawableViewNode;
-import com.android.hierarchyviewerlib.ui.util.DrawableViewNode.Point;
-import com.android.hierarchyviewerlib.ui.util.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.Image;
-import org.eclipse.swt.graphics.Path;
-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 ITreeChangeListener {
-
- private TreeViewModel mModel;
-
- private DrawableViewNode mTree;
-
- private Rectangle mViewport;
-
- private Transform mTransform;
-
- private Transform mInverse;
-
- private Rectangle mBounds = new Rectangle();
-
- private double mScale;
-
- private boolean mDragging = false;
-
- private DrawableViewNode mSelectedNode;
-
- private static Image sNotSelectedImage;
-
- private static Image sSelectedImage;
-
- private static Image sFilteredImage;
-
- private static Image sFilteredSelectedImage;
-
- public TreeViewOverview(Composite parent) {
- super(parent, SWT.NONE);
-
- mModel = TreeViewModel.getModel();
- mModel.addTreeChangeListener(this);
-
- loadResources();
-
- addPaintListener(mPaintListener);
- addMouseListener(mMouseListener);
- addMouseMoveListener(mMouseMoveListener);
- addListener(SWT.Resize, mResizeListener);
- addDisposeListener(mDisposeListener);
-
- mTransform = new Transform(Display.getDefault());
- mInverse = new Transform(Display.getDefault());
-
- loadAllData();
- }
-
- private void loadResources() {
- ImageLoader loader = ImageLoader.getLoader(this.getClass());
- sNotSelectedImage = loader.loadImage("not-selected.png", Display.getDefault()); //$NON-NLS-1$
- sSelectedImage = loader.loadImage("selected-small.png", Display.getDefault()); //$NON-NLS-1$
- sFilteredImage = loader.loadImage("filtered.png", Display.getDefault()); //$NON-NLS-1$
- sFilteredSelectedImage =
- loader.loadImage("selected-filtered-small.png", Display.getDefault()); //$NON-NLS-1$
- }
-
- private DisposeListener mDisposeListener = new DisposeListener() {
- @Override
- public void widgetDisposed(DisposeEvent e) {
- mModel.removeTreeChangeListener(TreeViewOverview.this);
- mTransform.dispose();
- mInverse.dispose();
- }
- };
-
- private MouseListener mMouseListener = new MouseListener() {
-
- @Override
- public void mouseDoubleClick(MouseEvent e) {
- // pass
- }
-
- @Override
- public void mouseDown(MouseEvent e) {
- boolean redraw = false;
- synchronized (TreeViewOverview.this) {
- if (mTree != null && mViewport != null) {
- mDragging = true;
- redraw = true;
- handleMouseEvent(transformPoint(e.x, e.y));
- }
- }
- if (redraw) {
- mModel.removeTreeChangeListener(TreeViewOverview.this);
- mModel.setViewport(mViewport);
- mModel.addTreeChangeListener(TreeViewOverview.this);
- doRedraw();
- }
- }
-
- @Override
- public void mouseUp(MouseEvent e) {
- boolean redraw = false;
- synchronized (TreeViewOverview.this) {
- if (mTree != null && mViewport != null) {
- mDragging = false;
- redraw = true;
- handleMouseEvent(transformPoint(e.x, e.y));
-
- // Update bounds and transform only on mouse up. That way,
- // you don't get confusing behaviour during mouse drag and
- // it snaps neatly at the end
- setBounds();
- setTransform();
- }
- }
- if (redraw) {
- mModel.removeTreeChangeListener(TreeViewOverview.this);
- mModel.setViewport(mViewport);
- mModel.addTreeChangeListener(TreeViewOverview.this);
- doRedraw();
- }
- }
-
- };
-
- private MouseMoveListener mMouseMoveListener = new MouseMoveListener() {
- @Override
- public void mouseMove(MouseEvent e) {
- boolean moved = false;
- synchronized (TreeViewOverview.this) {
- if (mDragging) {
- moved = true;
- handleMouseEvent(transformPoint(e.x, e.y));
- }
- }
- if (moved) {
- mModel.removeTreeChangeListener(TreeViewOverview.this);
- mModel.setViewport(mViewport);
- mModel.addTreeChangeListener(TreeViewOverview.this);
- doRedraw();
- }
- }
- };
-
- private void handleMouseEvent(Point pt) {
- mViewport.x = pt.x - mViewport.width / 2;
- mViewport.y = pt.y - mViewport.height / 2;
- if (mViewport.x < mBounds.x) {
- mViewport.x = mBounds.x;
- }
- if (mViewport.y < mBounds.y) {
- mViewport.y = mBounds.y;
- }
- if (mViewport.x + mViewport.width > mBounds.x + mBounds.width) {
- mViewport.x = mBounds.x + mBounds.width - mViewport.width;
- }
- if (mViewport.y + mViewport.height > mBounds.y + mBounds.height) {
- mViewport.y = mBounds.y + mBounds.height - mViewport.height;
- }
- }
-
- private Point transformPoint(double x, double y) {
- float[] pt = {
- (float) x, (float) y
- };
- mInverse.transform(pt);
- return new Point(pt[0], pt[1]);
- }
-
- private Listener mResizeListener = new Listener() {
- @Override
- public void handleEvent(Event arg0) {
- synchronized (TreeViewOverview.this) {
- setTransform();
- }
- doRedraw();
- }
- };
-
- private PaintListener mPaintListener = new PaintListener() {
- @Override
- public void paintControl(PaintEvent e) {
- synchronized (TreeViewOverview.this) {
- if (mTree != null) {
- e.gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
- e.gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
- e.gc.fillRectangle(0, 0, getBounds().width, getBounds().height);
- e.gc.setTransform(mTransform);
- e.gc.setLineWidth((int) Math.ceil(0.7 / mScale));
- Path connectionPath = new Path(Display.getDefault());
- paintRecursive(e.gc, mTree, connectionPath);
- e.gc.drawPath(connectionPath);
- connectionPath.dispose();
-
- if (mViewport != null) {
- e.gc.setAlpha(50);
- e.gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
- e.gc.fillRectangle((int) mViewport.x, (int) mViewport.y, (int) Math
- .ceil(mViewport.width), (int) Math.ceil(mViewport.height));
-
- e.gc.setAlpha(255);
- e.gc
- .setForeground(Display.getDefault().getSystemColor(
- SWT.COLOR_DARK_GRAY));
- e.gc.setLineWidth((int) Math.ceil(2 / mScale));
- e.gc.drawRectangle((int) mViewport.x, (int) mViewport.y, (int) Math
- .ceil(mViewport.width), (int) Math.ceil(mViewport.height));
- }
- }
- }
- }
- };
-
- private void paintRecursive(GC gc, DrawableViewNode node, Path connectionPath) {
- if (mSelectedNode == node && node.viewNode.filtered) {
- gc.drawImage(sFilteredSelectedImage, node.left, (int) Math.round(node.top));
- } else if (mSelectedNode == node) {
- gc.drawImage(sSelectedImage, node.left, (int) Math.round(node.top));
- } else if (node.viewNode.filtered) {
- gc.drawImage(sFilteredImage, node.left, (int) Math.round(node.top));
- } else {
- gc.drawImage(sNotSelectedImage, node.left, (int) Math.round(node.top));
- }
- int N = node.children.size();
- if (N == 0) {
- return;
- }
- float childSpacing =
- (1.0f * (DrawableViewNode.NODE_HEIGHT - 2 * TreeView.LINE_PADDING)) / N;
- for (int i = 0; i < N; i++) {
- DrawableViewNode child = node.children.get(i);
- paintRecursive(gc, child, connectionPath);
- float x1 = node.left + DrawableViewNode.NODE_WIDTH;
- float y1 =
- (float) node.top + TreeView.LINE_PADDING + childSpacing * i + childSpacing / 2;
- float x2 = child.left;
- float y2 = (float) child.top + DrawableViewNode.NODE_HEIGHT / 2.0f;
- float cx1 = x1 + TreeView.BEZIER_FRACTION * DrawableViewNode.PARENT_CHILD_SPACING;
- float cy1 = y1;
- float cx2 = x2 - TreeView.BEZIER_FRACTION * DrawableViewNode.PARENT_CHILD_SPACING;
- float cy2 = y2;
- connectionPath.moveTo(x1, y1);
- connectionPath.cubicTo(cx1, cy1, cx2, cy2, x2, y2);
- }
- }
-
- private void doRedraw() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- redraw();
- }
- });
- }
-
- public void loadAllData() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- synchronized (this) {
- mTree = mModel.getTree();
- mSelectedNode = mModel.getSelection();
- mViewport = mModel.getViewport();
- setBounds();
- setTransform();
- }
- }
- });
- }
-
- // Note the syncExec and then synchronized... It avoids deadlock
- @Override
- public void treeChanged() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- synchronized (this) {
- mTree = mModel.getTree();
- mSelectedNode = mModel.getSelection();
- mViewport = mModel.getViewport();
- setBounds();
- setTransform();
- }
- }
- });
- doRedraw();
- }
-
- private void setBounds() {
- if (mViewport != null && mTree != null) {
- mBounds.x = Math.min(mViewport.x, mTree.bounds.x);
- mBounds.y = Math.min(mViewport.y, mTree.bounds.y);
- mBounds.width =
- Math.max(mViewport.x + mViewport.width, mTree.bounds.x + mTree.bounds.width)
- - mBounds.x;
- mBounds.height =
- Math.max(mViewport.y + mViewport.height, mTree.bounds.y + mTree.bounds.height)
- - mBounds.y;
- } else if (mTree != null) {
- mBounds.x = mTree.bounds.x;
- mBounds.y = mTree.bounds.y;
- mBounds.width = mTree.bounds.x + mTree.bounds.width - mBounds.x;
- mBounds.height = mTree.bounds.y + mTree.bounds.height - mBounds.y;
- }
- }
-
- private void setTransform() {
- if (mTree != null) {
-
- mTransform.identity();
- mInverse.identity();
- final Point size = new Point();
- size.x = getBounds().width;
- size.y = getBounds().height;
- if (mBounds.width == 0 || mBounds.height == 0 || size.x == 0 || size.y == 0) {
- mScale = 1;
- } else {
- mScale = Math.min(size.x / mBounds.width, size.y / mBounds.height);
- }
- mTransform.scale((float) mScale, (float) mScale);
- mInverse.scale((float) mScale, (float) mScale);
- mTransform.translate((float) -mBounds.x, (float) -mBounds.y);
- mInverse.translate((float) -mBounds.x, (float) -mBounds.y);
- if (size.x / mBounds.width < size.y / mBounds.height) {
- mTransform.translate(0, (float) (size.y / mScale - mBounds.height) / 2);
- mInverse.translate(0, (float) (size.y / mScale - mBounds.height) / 2);
- } else {
- mTransform.translate((float) (size.x / mScale - mBounds.width) / 2, 0);
- mInverse.translate((float) (size.x / mScale - mBounds.width) / 2, 0);
- }
- mInverse.invert();
- }
- }
-
- @Override
- public void viewportChanged() {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- synchronized (this) {
- mViewport = mModel.getViewport();
- setBounds();
- setTransform();
- }
- }
- });
- doRedraw();
- }
-
- @Override
- public void zoomChanged() {
- viewportChanged();
- }
-
- @Override
- public void selectionChanged() {
- synchronized (this) {
- mSelectedNode = mModel.getSelection();
- }
- doRedraw();
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/util/DrawableViewNode.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/util/DrawableViewNode.java
deleted file mode 100644
index b196aaf..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/util/DrawableViewNode.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.hierarchyviewerlib.ui.util;
-
-import com.android.hierarchyviewerlib.device.ViewNode;
-
-import java.util.ArrayList;
-
-public class DrawableViewNode {
- public ViewNode viewNode;
-
- public final ArrayList<DrawableViewNode> children = new ArrayList<DrawableViewNode>();
-
- public final static int NODE_HEIGHT = 100;
-
- public final static int NODE_WIDTH = 180;
-
- public final static int CONTENT_LEFT_RIGHT_PADDING = 9;
-
- public final static int CONTENT_TOP_BOTTOM_PADDING = 8;
-
- public final static int CONTENT_INTER_PADDING = 3;
-
- public final static int INDEX_PADDING = 7;
-
- public final static int LEAF_NODE_SPACING = 9;
-
- public final static int NON_LEAF_NODE_SPACING = 15;
-
- public final static int PARENT_CHILD_SPACING = 50;
-
- public final static int PADDING = 30;
-
- public int treeHeight;
-
- public int treeWidth;
-
- public boolean leaf;
-
- public DrawableViewNode parent;
-
- public int left;
-
- public double top;
-
- public int topSpacing;
-
- public int bottomSpacing;
-
- public boolean treeDrawn;
-
- public static class Rectangle {
- public double x, y, width, height;
-
- public Rectangle() {
-
- }
-
- public Rectangle(Rectangle other) {
- this.x = other.x;
- this.y = other.y;
- this.width = other.width;
- this.height = other.height;
- }
-
- public Rectangle(double x, double y, double width, double height) {
- this.x = x;
- this.y = y;
- this.width = width;
- this.height = height;
- }
-
- @Override
- public String toString() {
- return "{" + x + ", " + y + ", " + width + ", " + height + "}"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
- }
-
- }
-
- public static class Point {
- public double x, y;
-
- public Point() {
- }
-
- public Point(double x, double y) {
- this.x = x;
- this.y = y;
- }
-
- @Override
- public String toString() {
- return "(" + x + ", " + y + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
- }
-
- public Rectangle bounds = new Rectangle();
-
- public DrawableViewNode(ViewNode viewNode) {
- this.viewNode = viewNode;
- treeDrawn = !viewNode.willNotDraw;
- if (viewNode.children.size() == 0) {
- treeHeight = NODE_HEIGHT;
- treeWidth = NODE_WIDTH;
- leaf = true;
- } else {
- leaf = false;
- int N = viewNode.children.size();
- treeHeight = 0;
- treeWidth = 0;
- for (int i = 0; i < N; i++) {
- DrawableViewNode child = new DrawableViewNode(viewNode.children.get(i));
- children.add(child);
- child.parent = this;
- treeHeight += child.treeHeight;
- treeWidth = Math.max(treeWidth, child.treeWidth);
- if (i != 0) {
- DrawableViewNode prevChild = children.get(i - 1);
- if (prevChild.leaf && child.leaf) {
- treeHeight += LEAF_NODE_SPACING;
- prevChild.bottomSpacing = LEAF_NODE_SPACING;
- child.topSpacing = LEAF_NODE_SPACING;
- } else {
- treeHeight += NON_LEAF_NODE_SPACING;
- prevChild.bottomSpacing = NON_LEAF_NODE_SPACING;
- child.topSpacing = NON_LEAF_NODE_SPACING;
- }
- }
- treeDrawn |= child.treeDrawn;
- }
- treeWidth += NODE_WIDTH + PARENT_CHILD_SPACING;
- }
- }
-
- public void setLeft() {
- if (parent == null) {
- left = PADDING;
- bounds.x = 0;
- bounds.width = treeWidth + 2 * PADDING;
- } else {
- left = parent.left + NODE_WIDTH + PARENT_CHILD_SPACING;
- }
- int N = children.size();
- for (int i = 0; i < N; i++) {
- children.get(i).setLeft();
- }
- }
-
- public void placeRoot() {
- top = PADDING + (treeHeight - NODE_HEIGHT) / 2.0;
- double currentTop = PADDING;
- int N = children.size();
- for (int i = 0; i < N; i++) {
- DrawableViewNode child = children.get(i);
- child.place(currentTop, top - currentTop);
- currentTop += child.treeHeight + child.bottomSpacing;
- }
- bounds.y = 0;
- bounds.height = treeHeight + 2 * PADDING;
- }
-
- private void place(double treeTop, double rootDistance) {
- if (treeHeight <= rootDistance) {
- top = treeTop + treeHeight - NODE_HEIGHT;
- } else if (rootDistance <= -NODE_HEIGHT) {
- top = treeTop;
- } else {
- if (children.size() == 0) {
- top = treeTop;
- } else {
- top =
- rootDistance + treeTop - NODE_HEIGHT + (2.0 * NODE_HEIGHT)
- / (treeHeight + NODE_HEIGHT) * (treeHeight - rootDistance);
- }
- }
- int N = children.size();
- double currentTop = treeTop;
- for (int i = 0; i < N; i++) {
- DrawableViewNode child = children.get(i);
- child.place(currentTop, rootDistance);
- currentTop += child.treeHeight + child.bottomSpacing;
- rootDistance -= child.treeHeight + child.bottomSpacing;
- }
- }
-
- public DrawableViewNode getSelected(double x, double y) {
- if (x >= left && x < left + NODE_WIDTH && y >= top && y <= top + NODE_HEIGHT) {
- return this;
- }
- int N = children.size();
- for (int i = 0; i < N; i++) {
- DrawableViewNode selected = children.get(i).getSelected(x, y);
- if (selected != null) {
- return selected;
- }
- }
- return null;
- }
-
- /*
- * Moves the node the specified distance up.
- */
- public void move(double distance) {
- top -= distance;
-
- // Get the root
- DrawableViewNode root = this;
- while (root.parent != null) {
- root = root.parent;
- }
-
- // Figure out the new tree top.
- double treeTop;
- if (top + NODE_HEIGHT <= root.top) {
- treeTop = top + NODE_HEIGHT - treeHeight;
- } else if (top >= root.top + NODE_HEIGHT) {
- treeTop = top;
- } else {
- if (leaf) {
- treeTop = top;
- } else {
- double distanceRatio = 1 - (root.top + NODE_HEIGHT - top) / (2.0 * NODE_HEIGHT);
- treeTop = root.top - treeHeight + distanceRatio * (treeHeight + NODE_HEIGHT);
- }
- }
- // Go up the tree and figure out the tree top.
- DrawableViewNode node = this;
- while (node.parent != null) {
- int index = node.viewNode.index;
- for (int i = 0; i < index; i++) {
- DrawableViewNode sibling = node.parent.children.get(i);
- treeTop -= sibling.treeHeight + sibling.bottomSpacing;
- }
- node = node.parent;
- }
-
- // Update the bounds.
- root.bounds.y = Math.min(root.top - PADDING, treeTop - PADDING);
- root.bounds.height =
- Math.max(treeTop + root.treeHeight + PADDING, root.top + NODE_HEIGHT + PADDING)
- - root.bounds.y;
- // Place all the children of the root
- double currentTop = treeTop;
- int N = root.children.size();
- for (int i = 0; i < N; i++) {
- DrawableViewNode child = root.children.get(i);
- child.place(currentTop, root.top - currentTop);
- currentTop += child.treeHeight + child.bottomSpacing;
- }
-
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/util/PsdFile.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/util/PsdFile.java
deleted file mode 100644
index 2c1154b..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/util/PsdFile.java
+++ /dev/null
@@ -1,508 +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.hierarchyviewerlib.ui.util;
-
-import java.awt.Graphics2D;
-import java.awt.Point;
-import java.awt.image.BufferedImage;
-import java.io.BufferedOutputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Writes PSD file. Supports only 8 bits, RGB images with 4 channels.
- */
-public class PsdFile {
- private final Header mHeader;
-
- private final ColorMode mColorMode;
-
- private final ImageResources mImageResources;
-
- private final LayersMasksInfo mLayersMasksInfo;
-
- private final LayersInfo mLayersInfo;
-
- private final BufferedImage mMergedImage;
-
- private final Graphics2D mGraphics;
-
- public PsdFile(int width, int height) {
- mHeader = new Header(width, height);
- mColorMode = new ColorMode();
- mImageResources = new ImageResources();
- mLayersMasksInfo = new LayersMasksInfo();
- mLayersInfo = new LayersInfo();
-
- mMergedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
- mGraphics = mMergedImage.createGraphics();
- }
-
- public void addLayer(String name, BufferedImage image, Point offset) {
- addLayer(name, image, offset, true);
- }
-
- public void addLayer(String name, BufferedImage image, Point offset, boolean visible) {
- mLayersInfo.addLayer(name, image, offset, visible);
- if (visible)
- mGraphics.drawImage(image, null, offset.x, offset.y);
- }
-
- public void write(OutputStream stream) {
- mLayersMasksInfo.setLayersInfo(mLayersInfo);
-
- DataOutputStream out = new DataOutputStream(new BufferedOutputStream(stream));
- try {
- mHeader.write(out);
- out.flush();
-
- mColorMode.write(out);
- mImageResources.write(out);
- mLayersMasksInfo.write(out);
- mLayersInfo.write(out);
- out.flush();
-
- mLayersInfo.writeImageData(out);
- out.flush();
-
- writeImage(mMergedImage, out, false);
- out.flush();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- out.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- private static void writeImage(BufferedImage image, DataOutputStream out, boolean split)
- throws IOException {
-
- if (!split)
- out.writeShort(0);
-
- int width = image.getWidth();
- int height = image.getHeight();
-
- final int length = width * height;
- int[] pixels = new int[length];
-
- image.getData().getDataElements(0, 0, width, height, pixels);
-
- byte[] a = new byte[length];
- byte[] r = new byte[length];
- byte[] g = new byte[length];
- byte[] b = new byte[length];
-
- for (int i = 0; i < length; i++) {
- final int pixel = pixels[i];
- a[i] = (byte) ((pixel >> 24) & 0xFF);
- r[i] = (byte) ((pixel >> 16) & 0xFF);
- g[i] = (byte) ((pixel >> 8) & 0xFF);
- b[i] = (byte) (pixel & 0xFF);
- }
-
- if (split)
- out.writeShort(0);
- if (split)
- out.write(a);
- if (split)
- out.writeShort(0);
- out.write(r);
- if (split)
- out.writeShort(0);
- out.write(g);
- if (split)
- out.writeShort(0);
- out.write(b);
- if (!split)
- out.write(a);
- }
-
- @SuppressWarnings( {
- "UnusedDeclaration"
- })
- static class Header {
- static final short MODE_BITMAP = 0;
-
- static final short MODE_GRAYSCALE = 1;
-
- static final short MODE_INDEXED = 2;
-
- static final short MODE_RGB = 3;
-
- static final short MODE_CMYK = 4;
-
- static final short MODE_MULTI_CHANNEL = 7;
-
- static final short MODE_DUOTONE = 8;
-
- static final short MODE_LAB = 9;
-
- final byte[] mSignature = "8BPS".getBytes(); //$NON-NLS-1$
-
- final short mVersion = 1;
-
- final byte[] mReserved = new byte[6];
-
- final short mChannelCount = 4;
-
- final int mHeight;
-
- final int mWidth;
-
- final short mDepth = 8;
-
- final short mMode = MODE_RGB;
-
- Header(int width, int height) {
- mWidth = width;
- mHeight = height;
- }
-
- void write(DataOutputStream out) throws IOException {
- out.write(mSignature);
- out.writeShort(mVersion);
- out.write(mReserved);
- out.writeShort(mChannelCount);
- out.writeInt(mHeight);
- out.writeInt(mWidth);
- out.writeShort(mDepth);
- out.writeShort(mMode);
- }
- }
-
- // Unused at the moment
- @SuppressWarnings( {
- "UnusedDeclaration"
- })
- static class ColorMode {
- final int mLength = 0;
-
- void write(DataOutputStream out) throws IOException {
- out.writeInt(mLength);
- }
- }
-
- // Unused at the moment
- @SuppressWarnings( {
- "UnusedDeclaration"
- })
- static class ImageResources {
- static final short RESOURCE_RESOLUTION_INFO = 0x03ED;
-
- int mLength = 0;
-
- final byte[] mSignature = "8BIM".getBytes(); //$NON-NLS-1$
-
- final short mResourceId = RESOURCE_RESOLUTION_INFO;
-
- final short mPad = 0;
-
- final int mDataLength = 16;
-
- final short mHorizontalDisplayUnit = 0x48; // 72 dpi
-
- final int mHorizontalResolution = 1;
-
- final short mWidthDisplayUnit = 1;
-
- final short mVerticalDisplayUnit = 0x48; // 72 dpi
-
- final int mVerticalResolution = 1;
-
- final short mHeightDisplayUnit = 1;
-
- ImageResources() {
- mLength = mSignature.length;
- mLength += 2;
- mLength += 2;
- mLength += 4;
- mLength += 8;
- mLength += 8;
- }
-
- void write(DataOutputStream out) throws IOException {
- out.writeInt(mLength);
- out.write(mSignature);
- out.writeShort(mResourceId);
- out.writeShort(mPad);
- out.writeInt(mDataLength);
- out.writeShort(mHorizontalDisplayUnit);
- out.writeInt(mHorizontalResolution);
- out.writeShort(mWidthDisplayUnit);
- out.writeShort(mVerticalDisplayUnit);
- out.writeInt(mVerticalResolution);
- out.writeShort(mHeightDisplayUnit);
- }
- }
-
- @SuppressWarnings( {
- "UnusedDeclaration"
- })
- static class LayersMasksInfo {
- int mMiscLength;
-
- int mLayerInfoLength;
-
- void setLayersInfo(LayersInfo layersInfo) {
- mLayerInfoLength = layersInfo.getLength();
- // Round to the next multiple of 2
- if ((mLayerInfoLength & 0x1) == 0x1)
- mLayerInfoLength++;
- mMiscLength = mLayerInfoLength + 8;
- }
-
- void write(DataOutputStream out) throws IOException {
- out.writeInt(mMiscLength);
- out.writeInt(mLayerInfoLength);
- }
- }
-
- @SuppressWarnings( {
- "UnusedDeclaration"
- })
- static class LayersInfo {
- final List<Layer> mLayers = new ArrayList<Layer>();
-
- void addLayer(String name, BufferedImage image, Point offset, boolean visible) {
- mLayers.add(new Layer(name, image, offset, visible));
- }
-
- int getLength() {
- int length = 2;
- for (Layer layer : mLayers) {
- length += layer.getLength();
- }
- return length;
- }
-
- void write(DataOutputStream out) throws IOException {
- out.writeShort((short) -mLayers.size());
- for (Layer layer : mLayers) {
- layer.write(out);
- }
- }
-
- void writeImageData(DataOutputStream out) throws IOException {
- for (Layer layer : mLayers) {
- layer.writeImageData(out);
- }
- // Global layer mask info length
- out.writeInt(0);
- }
- }
-
- @SuppressWarnings( {
- "UnusedDeclaration"
- })
- static class Layer {
- static final byte OPACITY_TRANSPARENT = 0x0;
-
- static final byte OPACITY_OPAQUE = (byte) 0xFF;
-
- static final byte CLIPPING_BASE = 0x0;
-
- static final byte CLIPPING_NON_BASE = 0x1;
-
- static final byte FLAG_TRANSPARENCY_PROTECTED = 0x1;
-
- static final byte FLAG_INVISIBLE = 0x2;
-
- final int mTop;
-
- final int mLeft;
-
- final int mBottom;
-
- final int mRight;
-
- final short mChannelCount = 4;
-
- final Channel[] mChannelInfo = new Channel[mChannelCount];
-
- final byte[] mBlendSignature = "8BIM".getBytes(); //$NON-NLS-1$
-
- final byte[] mBlendMode = "norm".getBytes(); //$NON-NLS-1$
-
- final byte mOpacity = OPACITY_OPAQUE;
-
- final byte mClipping = CLIPPING_BASE;
-
- byte mFlags = 0x0;
-
- final byte mFiller = 0x0;
-
- int mExtraSize = 4 + 4;
-
- final int mMaskDataLength = 0;
-
- final int mBlendRangeDataLength = 0;
-
- final byte[] mName;
-
- final byte[] mLayerExtraSignature = "8BIM".getBytes(); //$NON-NLS-1$
-
- final byte[] mLayerExtraKey = "luni".getBytes(); //$NON-NLS-1$
-
- int mLayerExtraLength;
-
- final String mOriginalName;
-
- private BufferedImage mImage;
-
- Layer(String name, BufferedImage image, Point offset, boolean visible) {
- final int height = image.getHeight();
- final int width = image.getWidth();
- final int length = width * height;
-
- mChannelInfo[0] = new Channel(Channel.ID_ALPHA, length);
- mChannelInfo[1] = new Channel(Channel.ID_RED, length);
- mChannelInfo[2] = new Channel(Channel.ID_GREEN, length);
- mChannelInfo[3] = new Channel(Channel.ID_BLUE, length);
-
- mTop = offset.y;
- mLeft = offset.x;
- mBottom = offset.y + height;
- mRight = offset.x + width;
-
- mOriginalName = name;
- byte[] data = name.getBytes();
-
- try {
- mLayerExtraLength = 4 + mOriginalName.getBytes("UTF-16").length; //$NON-NLS-1$
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
-
- final byte[] nameData = new byte[data.length + 1];
- nameData[0] = (byte) (data.length & 0xFF);
- System.arraycopy(data, 0, nameData, 1, data.length);
-
- // This could be done in the same pass as above
- if (nameData.length % 4 != 0) {
- data = new byte[nameData.length + 4 - (nameData.length % 4)];
- System.arraycopy(nameData, 0, data, 0, nameData.length);
- mName = data;
- } else {
- mName = nameData;
- }
- mExtraSize += mName.length;
- mExtraSize +=
- mLayerExtraLength + 4 + mLayerExtraKey.length + mLayerExtraSignature.length;
-
- mImage = image;
-
- if (!visible) {
- mFlags |= FLAG_INVISIBLE;
- }
- }
-
- int getLength() {
- int length = 4 * 4 + 2;
-
- for (Channel channel : mChannelInfo) {
- length += channel.getLength();
- }
-
- length += mBlendSignature.length;
- length += mBlendMode.length;
- length += 4;
- length += 4;
- length += mExtraSize;
-
- return length;
- }
-
- void write(DataOutputStream out) throws IOException {
- out.writeInt(mTop);
- out.writeInt(mLeft);
- out.writeInt(mBottom);
- out.writeInt(mRight);
-
- out.writeShort(mChannelCount);
- for (Channel channel : mChannelInfo) {
- channel.write(out);
- }
-
- out.write(mBlendSignature);
- out.write(mBlendMode);
-
- out.write(mOpacity);
- out.write(mClipping);
- out.write(mFlags);
- out.write(mFiller);
-
- out.writeInt(mExtraSize);
- out.writeInt(mMaskDataLength);
-
- out.writeInt(mBlendRangeDataLength);
-
- out.write(mName);
-
- out.write(mLayerExtraSignature);
- out.write(mLayerExtraKey);
- out.writeInt(mLayerExtraLength);
- out.writeInt(mOriginalName.length() + 1);
- out.write(mOriginalName.getBytes("UTF-16")); //$NON-NLS-1$
- }
-
- void writeImageData(DataOutputStream out) throws IOException {
- writeImage(mImage, out, true);
- }
- }
-
- @SuppressWarnings( {
- "UnusedDeclaration"
- })
- static class Channel {
- static final short ID_RED = 0;
-
- static final short ID_GREEN = 1;
-
- static final short ID_BLUE = 2;
-
- static final short ID_ALPHA = -1;
-
- static final short ID_LAYER_MASK = -2;
-
- final short mId;
-
- final int mDataLength;
-
- Channel(short id, int dataLength) {
- mId = id;
- mDataLength = dataLength + 2;
- }
-
- int getLength() {
- return 2 + 4 + mDataLength;
- }
-
- void write(DataOutputStream out) throws IOException {
- out.writeShort(mId);
- out.writeInt(mDataLength);
- }
- }
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/util/TreeColumnResizer.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/util/TreeColumnResizer.java
deleted file mode 100644
index 1213620..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/ui/util/TreeColumnResizer.java
+++ /dev/null
@@ -1,114 +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.hierarchyviewerlib.ui.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 mColumn1;
-
- private TreeColumn mColumn2;
-
- private Composite mControl;
-
- private int mColumn1Width;
-
- private int mColumn2Width;
-
- private final static int MIN_COLUMN1_WIDTH = 18;
-
- private final static int MIN_COLUMN2_WIDTH = 3;
-
- public TreeColumnResizer(Composite control, TreeColumn column1, TreeColumn column2) {
- this.mControl = control;
- this.mColumn1 = column1;
- this.mColumn2 = column2;
- control.addListener(SWT.Resize, resizeListener);
- column1.addListener(SWT.Resize, column1ResizeListener);
- column2.setResizable(false);
- }
-
- private Listener resizeListener = new Listener() {
- @Override
- public void handleEvent(Event e) {
- if (mColumn1Width == 0 && mColumn2Width == 0) {
- mColumn1Width = (mControl.getBounds().width - 18) / 2;
- mColumn2Width = (mControl.getBounds().width - 18) / 2;
- } else {
- int dif = mControl.getBounds().width - 18 - (mColumn1Width + mColumn2Width);
- int columnDif = Math.abs(mColumn1Width - mColumn2Width);
- int mainColumnChange = Math.min(Math.abs(dif), columnDif);
- int left = Math.max(0, Math.abs(dif) - columnDif);
- if (dif < 0) {
- if (mColumn1Width > mColumn2Width) {
- mColumn1Width -= mainColumnChange;
- } else {
- mColumn2Width -= mainColumnChange;
- }
- mColumn1Width -= left / 2;
- mColumn2Width -= left - left / 2;
- } else {
- if (mColumn1Width > mColumn2Width) {
- mColumn2Width += mainColumnChange;
- } else {
- mColumn1Width += mainColumnChange;
- }
- mColumn1Width += left / 2;
- mColumn2Width += left - left / 2;
- }
- }
- mColumn1.removeListener(SWT.Resize, column1ResizeListener);
- mColumn1.setWidth(mColumn1Width);
- mColumn2.setWidth(mColumn2Width);
- mColumn1.addListener(SWT.Resize, column1ResizeListener);
- }
- };
-
- private Listener column1ResizeListener = new Listener() {
- @Override
- public void handleEvent(Event e) {
- int widthDif = mColumn1Width - mColumn1.getWidth();
- mColumn1Width -= widthDif;
- mColumn2Width += widthDif;
- boolean column1Changed = false;
-
- // Strange, but these constants make the columns look the same.
-
- if (mColumn1Width < MIN_COLUMN1_WIDTH) {
- mColumn2Width -= MIN_COLUMN1_WIDTH - mColumn1Width;
- mColumn1Width += MIN_COLUMN1_WIDTH - mColumn1Width;
- column1Changed = true;
- }
- if (mColumn2Width < MIN_COLUMN2_WIDTH) {
- mColumn1Width += mColumn2Width - MIN_COLUMN2_WIDTH;
- mColumn2Width = MIN_COLUMN2_WIDTH;
- column1Changed = true;
- }
- if (column1Changed) {
- mColumn1.removeListener(SWT.Resize, this);
- mColumn1.setWidth(mColumn1Width);
- mColumn1.addListener(SWT.Resize, this);
- }
- mColumn2.setWidth(mColumn2Width);
- }
- };
-}
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/auto-refresh.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/auto-refresh.png
deleted file mode 100644
index 240862f..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/auto-refresh.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/capture-psd.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/capture-psd.png
deleted file mode 100644
index 0f25426..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/capture-psd.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/device-view-selected.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/device-view-selected.png
deleted file mode 100644
index fd107ed..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/device-view-selected.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/device-view.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/device-view.png
deleted file mode 100644
index 9a7eed4..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/device-view.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/display.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/display.png
deleted file mode 100644
index a9de0ec..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/display.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/filtered.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/filtered.png
deleted file mode 100644
index 4fcab3f..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/filtered.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/green.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/green.png
deleted file mode 100644
index 800000d..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/green.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/inspect-screenshot.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/inspect-screenshot.png
deleted file mode 100644
index 6e51701..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/inspect-screenshot.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/invalidate.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/invalidate.png
deleted file mode 100644
index ee75f69..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/invalidate.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/load-all-views.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/load-all-views.png
deleted file mode 100644
index 3329ec9..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/load-all-views.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/load-overlay.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/load-overlay.png
deleted file mode 100644
index 4817252..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/load-overlay.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/load-view-hierarchy.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/load-view-hierarchy.png
deleted file mode 100644
index 8f01dda..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/load-view-hierarchy.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/not-selected.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/not-selected.png
deleted file mode 100644
index db6f13b..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/not-selected.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/on-black.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/on-black.png
deleted file mode 100644
index cd88803..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/on-black.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/on-white.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/on-white.png
deleted file mode 100644
index 5f05662..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/on-white.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/pixel-perfect-view-selected.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/pixel-perfect-view-selected.png
deleted file mode 100644
index 1e44000..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/pixel-perfect-view-selected.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/pixel-perfect-view.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/pixel-perfect-view.png
deleted file mode 100644
index ec51cec..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/pixel-perfect-view.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/red.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/red.png
deleted file mode 100644
index a2ab855..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/red.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/refresh-windows.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/refresh-windows.png
deleted file mode 100644
index 8fddcae..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/refresh-windows.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/request-layout.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/request-layout.png
deleted file mode 100644
index 92a78c8..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/request-layout.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/save.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/save.png
deleted file mode 100644
index 2c0bab1..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/save.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/sdk-hierarchyviewer-128.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/sdk-hierarchyviewer-128.png
deleted file mode 100644
index 4535f22..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/sdk-hierarchyviewer-128.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/sdk-hierarchyviewer-16.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/sdk-hierarchyviewer-16.png
deleted file mode 100755
index 8c3c23d..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/sdk-hierarchyviewer-16.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/selected-filtered-small.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/selected-filtered-small.png
deleted file mode 100644
index 9ef6b34..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/selected-filtered-small.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/selected-filtered.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/selected-filtered.png
deleted file mode 100644
index 1f59685..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/selected-filtered.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/selected-small.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/selected-small.png
deleted file mode 100644
index 538e385..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/selected-small.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/selected.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/selected.png
deleted file mode 100644
index 5cd5c3f..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/selected.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/show-extras.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/show-extras.png
deleted file mode 100644
index ba9c305..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/show-extras.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/show-overlay.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/show-overlay.png
deleted file mode 100644
index e39e90a..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/show-overlay.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/tree-view-selected.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/tree-view-selected.png
deleted file mode 100644
index 175ad1f..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/tree-view-selected.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/tree-view.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/tree-view.png
deleted file mode 100644
index 23aa424..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/tree-view.png
+++ /dev/null
Binary files differ
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/yellow.png b/hierarchyviewer2/libs/hierarchyviewerlib/src/images/yellow.png
deleted file mode 100644
index e9b5781..0000000
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/images/yellow.png
+++ /dev/null
Binary files differ