Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Schindl2010-03-03 21:12:20 +0000
committerThomas Schindl2010-03-03 21:12:20 +0000
commit4ebe54f49f49ff82793d9db6d9653a786623cbad (patch)
treefcd1568ef381b63fb23d9c9c573e9df79408992d
downloadorg.eclipse.e4.tools-4ebe54f49f49ff82793d9db6d9653a786623cbad.tar.gz
org.eclipse.e4.tools-4ebe54f49f49ff82793d9db6d9653a786623cbad.tar.xz
org.eclipse.e4.tools-4ebe54f49f49ff82793d9db6d9653a786623cbad.zip
[Bug 304584] - [Tooling] Implement Workbench-Model-Tooling
* a first draft implementation
-rw-r--r--.gitignore12
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/.classpath7
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/.project28
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/.settings/org.eclipse.jdt.core.prefs8
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/.settings/org.eclipse.pde.core.prefs4
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/META-INF/MANIFEST.MF25
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/about.html45
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/build.properties12
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/icons/application.pngbin0 -> 464 bytes
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/icons/application_double.pngbin0 -> 533 bytes
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/icons/application_form.pngbin0 -> 467 bytes
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/icons/application_form_edit.pngbin0 -> 714 bytes
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/icons/application_view_icons.pngbin0 -> 476 bytes
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/icons/cog.pngbin0 -> 512 bytes
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/icons/package_go.pngbin0 -> 898 bytes
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/plugin.properties8
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/IModelResource.java22
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/XMIModelResource.java72
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/component/AbstractComponentEditor.java23
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/ShadowComposite.java1094
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ComponentLabelProvider.java141
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java233
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/VirtualEntry.java78
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ApplicationEditor.java53
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ModelComponentEditor.java151
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ModelComponentsEditor.java51
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartDescriptorEditor.java37
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartEditor.java206
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/wbe/ExtensionModelEditor.java5
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/wbm/ApplicationModelEditor.java16
30 files changed, 2331 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..144b5bff
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,12 @@
+bin/
+*~
+*.rej
+*.bak
+core
+*.patch
+javacore.*
+heapdump.*
+core.*
+Snap.*
+target/
+
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/.classpath b/bundles/org.eclipse.e4.tools.emf.ui/.classpath
new file mode 100644
index 00000000..304e8618
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/.project b/bundles/org.eclipse.e4.tools.emf.ui/.project
new file mode 100644
index 00000000..3848d4ae
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.e4.tools.emf.ui</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.e4.tools.emf.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..04d8a387
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Tue Mar 02 18:39:11 CET 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/.settings/org.eclipse.pde.core.prefs b/bundles/org.eclipse.e4.tools.emf.ui/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 00000000..81bd2f27
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,4 @@
+#Tue Mar 02 18:39:11 CET 2010
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.tools.emf.ui/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..39de767f
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,25 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.e4.tools.emf.ui;singleton:=true
+Bundle-Version: 1.0.0
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.core.databinding;bundle-version="1.3.0",
+ org.eclipse.core.databinding.property;bundle-version="1.2.100",
+ org.eclipse.e4.ui.model.workbench;bundle-version="0.9.1",
+ org.eclipse.emf.databinding;bundle-version="1.2.0",
+ org.eclipse.jface.databinding;bundle-version="1.4.0",
+ org.eclipse.jface;bundle-version="3.6.0",
+ org.eclipse.emf.edit;bundle-version="2.6.0",
+ org.eclipse.equinox.common;bundle-version="3.6.0"
+Bundle-ActivationPolicy: lazy
+Import-Package: javax.inject;version="1.0.0"
+Export-Package: org.eclipse.e4.tools.emf.ui.common,
+ org.eclipse.e4.tools.emf.ui.common.component,
+ org.eclipse.e4.tools.emf.ui.internal.common;x-internal:=true,
+ org.eclipse.e4.tools.emf.ui.internal.common.component;x-internal:=true,
+ org.eclipse.e4.tools.emf.ui.internal.wbe;x-internal:=true,
+ org.eclipse.e4.tools.emf.ui.internal.wbm;x-internal:=true
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/about.html b/bundles/org.eclipse.e4.tools.emf.ui/about.html
new file mode 100644
index 00000000..c1343aa3
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/about.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>December 3, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+<h3>Third Party Content</h3>
+
+<p>The Content includes items from third parties as set out below. If you did not
+receive this Content directly from the Eclipse Foundation, the following is provided for informational
+purposes only, and you should look to the Redistributor&rsquo;s license for terms and conditions of use.</p>
+
+<h4>Silk icon set Version 1.3</h4>
+<p>
+This plugin contains icons from the Silk icon set created by Mark James. The original files can
+be found at:
+<ul>
+<a href="http://www.famfamfam.com/lab/icons/silk/">http://www.famfamfam.com/lab/icons/silk/</a></ul>
+<p>The license can be found at:</p>
+<ul>
+ <li><a href="http://creativecommons.org/licenses/by/2.5/">http://creativecommons.org/licenses/by/2.5/</a></li>
+</ul>
+
+</body>
+</html> \ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/build.properties b/bundles/org.eclipse.e4.tools.emf.ui/build.properties
new file mode 100644
index 00000000..6cf6ee0d
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/build.properties
@@ -0,0 +1,12 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+ META-INF/,\
+ plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/icons/application.png b/bundles/org.eclipse.e4.tools.emf.ui/icons/application.png
new file mode 100644
index 00000000..1dee9e36
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/icons/application.png
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/icons/application_double.png b/bundles/org.eclipse.e4.tools.emf.ui/icons/application_double.png
new file mode 100644
index 00000000..647592f2
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/icons/application_double.png
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/icons/application_form.png b/bundles/org.eclipse.e4.tools.emf.ui/icons/application_form.png
new file mode 100644
index 00000000..807b862c
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/icons/application_form.png
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/icons/application_form_edit.png b/bundles/org.eclipse.e4.tools.emf.ui/icons/application_form_edit.png
new file mode 100644
index 00000000..af486c94
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/icons/application_form_edit.png
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/icons/application_view_icons.png b/bundles/org.eclipse.e4.tools.emf.ui/icons/application_view_icons.png
new file mode 100644
index 00000000..6a93cdaa
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/icons/application_view_icons.png
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/icons/cog.png b/bundles/org.eclipse.e4.tools.emf.ui/icons/cog.png
new file mode 100644
index 00000000..67de2c6c
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/icons/cog.png
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/icons/package_go.png b/bundles/org.eclipse.e4.tools.emf.ui/icons/package_go.png
new file mode 100644
index 00000000..aace63ad
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/icons/package_go.png
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/plugin.properties b/bundles/org.eclipse.e4.tools.emf.ui/plugin.properties
new file mode 100644
index 00000000..14a799fb
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/plugin.properties
@@ -0,0 +1,8 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+pluginName = EMFUI Model
+providerName = www.example.org
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/IModelResource.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/IModelResource.java
new file mode 100644
index 00000000..e47b866b
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/IModelResource.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2010 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.e4.tools.emf.ui.common;
+
+import org.eclipse.core.databinding.observable.list.IObservableList;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.emf.edit.domain.EditingDomain;
+
+public interface IModelResource {
+ public IObservableList getRoot();
+ public boolean isSaveable();
+ public IStatus save();
+ public EditingDomain getEditingDomain();
+}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/XMIModelResource.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/XMIModelResource.java
new file mode 100644
index 00000000..7d7510a6
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/XMIModelResource.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2010 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.e4.tools.emf.ui.common;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.databinding.observable.list.IObservableList;
+import org.eclipse.core.databinding.observable.list.WritableList;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+
+public class XMIModelResource implements IModelResource {
+ private EditingDomain editingDomain;
+ private Resource resource;
+
+ public XMIModelResource(String uri) {
+ ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(
+ ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+ ResourceSet resourceSet = new ResourceSetImpl();
+ BasicCommandStack commandStack = new BasicCommandStack();
+ editingDomain = new AdapterFactoryEditingDomain(adapterFactory,
+ commandStack, resourceSet);
+ resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap()
+ .put(Resource.Factory.Registry.DEFAULT_EXTENSION,
+ new XMIResourceFactoryImpl());
+ resource = resourceSet.getResource(URI.createURI(uri), true);
+ }
+
+ public IObservableList getRoot() {
+ WritableList list = new WritableList();
+ list.add(resource.getContents().get(0));
+ return list;
+ }
+
+ public EditingDomain getEditingDomain() {
+ return editingDomain;
+ }
+
+ public boolean isSaveable() {
+ return true;
+ }
+
+ public IStatus save() {
+ Map<String, String> map = new HashMap<String, String>();
+ try {
+ resource.save(map);
+ } catch (Exception e) {
+ // TODO: handle exception
+ }
+
+ return Status.OK_STATUS;
+ }
+
+}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/component/AbstractComponentEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/component/AbstractComponentEditor.java
new file mode 100644
index 00000000..24ba71f6
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/component/AbstractComponentEditor.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2010 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.e4.tools.emf.ui.common.component;
+
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+
+public abstract class AbstractComponentEditor {
+// public abstract boolean canHandle(Object object);
+ public abstract Image getImage(Display display);
+ public abstract String getLabel();
+ public abstract String getDescription();
+ public abstract Composite getEditor(Composite parent, Object object);
+}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/ShadowComposite.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/ShadowComposite.java
new file mode 100644
index 00000000..ed5f6137
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/ShadowComposite.java
@@ -0,0 +1,1094 @@
+package org.eclipse.e4.tools.emf.ui.internal;
+
+import org.eclipse.swt.SWT;
+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.Rectangle;
+import org.eclipse.swt.graphics.Region;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+
+public class ShadowComposite extends Composite {
+ // Constants for circle drawing
+ final static int LEFT_TOP = 0;
+ final static int LEFT_BOTTOM = 1;
+ final static int RIGHT_TOP = 2;
+ final static int RIGHT_BOTTOM = 3;
+
+ // drop shadow constants
+ final static int SIDE_DROP_WIDTH = 3;
+ final static int BOTTOM_DROP_WIDTH = 5;
+
+ // keylines
+ final static int OUTER_KEYLINE = 2;
+ final static int INNER_KEYLINE = 1;
+ final static int TOP_KEYLINE = 2;
+
+ static final int CORNER_SIZE = 24;
+
+ static final String E4_SHADOW_IMAGE = "org.eclipse.e4.renderer.comp_image"; //$NON-NLS-1$
+
+ int marginWidth;
+ int marginHeight;
+
+ static int[] shape;
+
+ static int[] shadow = { 0x02fefefe, 0x03fefefe, 0x05fefefe, 0x06fdfdfd,
+ 0x08fdfdfd, 0x0bfcfcfc, 0x0dfcfcfc, 0x10fbfbfb, 0x13fafafa,
+ 0x17f9f9f9, 0x1af9f9f9, 0x1df8f8f8, 0x20f7f7f7, 0x23f6f6f6,
+ 0x26f6f6f6, 0x28f5f5f5, 0x29f5f5f5, 0x2bf4f4f4, 0x2cf4f4f4,
+ 0x2df4f4f4, 0x2df4f4f4, 0x2ef4f4f4, 0x2ef4f4f4, 0x2ef4f4f4,
+ 0x2ff4f4f4, 0x2ff3f3f3, 0x2ff3f3f3, 0x2ff3f3f3, 0x2ff3f3f3,
+ 0x2ff3f3f3, 0x2ff3f3f3, 0x2ff3f3f3, 0x2ff3f3f3, 0x2ff3f3f3,
+ 0x2ff3f3f3, 0x2ff4f4f4, 0x2ef4f4f4, 0x2ef4f4f4, 0x2ef4f4f4,
+ 0x2df4f4f4, 0x2df4f4f4, 0x2cf4f4f4, 0x2bf4f4f4, 0x29f5f5f5,
+ 0x28f5f5f5, 0x26f6f6f6, 0x23f6f6f6, 0x20f7f7f7, 0x1df8f8f8,
+ 0x1af9f9f9, 0x17f9f9f9, 0x13fafafa, 0x10fbfbfb, 0x0dfcfcfc,
+ 0x0bfcfcfc, 0x08fdfdfd, 0x06fdfdfd, 0x05fefefe, 0x03fefefe,
+ 0x02fefefe, 0x03fefefe, 0x05fefefe, 0x07fdfdfd, 0x09fdfdfd,
+ 0x0cfcfcfc, 0x0ffbfbfb, 0x13fafafa, 0x17f9f9f9, 0x1bf8f8f8,
+ 0x1ff7f7f7, 0x23f6f6f6, 0x27f5f5f5, 0x2bf4f4f4, 0x2ff3f3f3,
+ 0x32f3f3f3, 0x35f2f2f2, 0x37f1f1f1, 0x39f1f1f1, 0x3af1f1f1,
+ 0x3bf0f0f0, 0x3cf0f0f0, 0x3df0f0f0, 0x3df0f0f0, 0x3df0f0f0,
+ 0x3df0f0f0, 0x3df0f0f0, 0x3df0f0f0, 0x3df0f0f0, 0x3df0f0f0,
+ 0x3df0f0f0, 0x3df0f0f0, 0x3df0f0f0, 0x3df0f0f0, 0x3df0f0f0,
+ 0x3df0f0f0, 0x3df0f0f0, 0x3df0f0f0, 0x3df0f0f0, 0x3df0f0f0,
+ 0x3cf0f0f0, 0x3bf0f0f0, 0x3af1f1f1, 0x39f1f1f1, 0x37f1f1f1,
+ 0x35f2f2f2, 0x32f3f3f3, 0x2ff3f3f3, 0x2bf4f4f4, 0x27f5f5f5,
+ 0x23f6f6f6, 0x1ff7f7f7, 0x1bf8f8f8, 0x17f9f9f9, 0x13fafafa,
+ 0x0ffbfbfb, 0x0cfcfcfc, 0x09fdfdfd, 0x07fdfdfd, 0x05fefefe,
+ 0x03fefefe, 0x05fefefe, 0x07fdfdfd, 0x09fdfdfd, 0x0dfcfcfc,
+ 0x10fbfbfb, 0x15fafafa, 0x19f9f9f9, 0x1ef8f8f8, 0x24f6f6f6,
+ 0x29f5f5f5, 0x2ff4f4f4, 0x34f2f2f2, 0x39f1f1f1, 0x3df0f0f0,
+ 0x41efefef, 0x44eeeeee, 0x47ededed, 0x49ededed, 0x4bededed,
+ 0x4cececec, 0x4dececec, 0x4dececec, 0x4eececec, 0x4eececec,
+ 0x4eececec, 0x4eececec, 0x4eececec, 0x4fececec, 0x4fececec,
+ 0x4fececec, 0x4fececec, 0x4fececec, 0x4fececec, 0x4eececec,
+ 0x4eececec, 0x4eececec, 0x4eececec, 0x4eececec, 0x4dececec,
+ 0x4dececec, 0x4cececec, 0x4bededed, 0x49ededed, 0x47ededed,
+ 0x44eeeeee, 0x41efefef, 0x3df0f0f0, 0x39f1f1f1, 0x34f2f2f2,
+ 0x2ff4f4f4, 0x29f5f5f5, 0x24f6f6f6, 0x1ef8f8f8, 0x19f9f9f9,
+ 0x15fafafa, 0x10fbfbfb, 0x0dfcfcfc, 0x09fdfdfd, 0x07fdfdfd,
+ 0x05fefefe, 0x07fdfdfd, 0x09fdfdfd, 0x0dfcfcfc, 0x11fbfbfb,
+ 0x16fafafa, 0x1bf8f8f8, 0x21f7f7f7, 0x27f5f5f5, 0x2ef4f4f4,
+ 0x35f2f2f2, 0x3cf0f0f0, 0x42efefef, 0x48ededed, 0x4dececec,
+ 0x51ebebeb, 0x55eaeaea, 0x58e9e9e9, 0x5be9e9e9, 0x5de8e8e8,
+ 0x5ee8e8e8, 0x5fe7e7e7, 0x60e7e7e7, 0x61e7e7e7, 0x61e7e7e7,
+ 0x61e7e7e7, 0x61e7e7e7, 0x61e7e7e7, 0x61e7e7e7, 0x61e7e7e7,
+ 0x61e7e7e7, 0x61e7e7e7, 0x61e7e7e7, 0x61e7e7e7, 0x61e7e7e7,
+ 0x61e7e7e7, 0x61e7e7e7, 0x61e7e7e7, 0x61e7e7e7, 0x60e7e7e7,
+ 0x5fe7e7e7, 0x5ee8e8e8, 0x5de8e8e8, 0x5be9e9e9, 0x58e9e9e9,
+ 0x55eaeaea, 0x51ebebeb, 0x4dececec, 0x48ededed, 0x42efefef,
+ 0x3cf0f0f0, 0x35f2f2f2, 0x2ef4f4f4, 0x27f5f5f5, 0x21f7f7f7,
+ 0x1bf8f8f8, 0x16fafafa, 0x11fbfbfb, 0x0dfcfcfc, 0x09fdfdfd,
+ 0x07fdfdfd, 0x09fdfdfd, 0x0dfcfcfc, 0x11fbfbfb, 0x16fafafa,
+ 0x1cf8f8f8, 0x23f6f6f6, 0x2af5f5f5, 0x32f3f3f3, 0x3af1f1f1,
+ 0x42efefef, 0x4aededed, 0x51ebebeb, 0x58e9e9e9, 0x5ee8e8e8,
+ 0x64e6e6e6, 0x68e5e5e5, 0x6ce4e4e4, 0x6ee4e4e4, 0x70e3e3e3,
+ 0x72e3e3e3, 0x73e3e3e3, 0x74e2e2e2, 0x75e2e2e2, 0x75e2e2e2,
+ 0x75e2e2e2, 0x75e2e2e2, 0x75e2e2e2, 0x75e2e2e2, 0x75e2e2e2,
+ 0x75e2e2e2, 0x75e2e2e2, 0x75e2e2e2, 0x75e2e2e2, 0x75e2e2e2,
+ 0x75e2e2e2, 0x75e2e2e2, 0x75e2e2e2, 0x75e2e2e2, 0x74e2e2e2,
+ 0x73e3e3e3, 0x72e3e3e3, 0x70e3e3e3, 0x6ee4e4e4, 0x6ce4e4e4,
+ 0x68e5e5e5, 0x64e6e6e6, 0x5ee8e8e8, 0x58e9e9e9, 0x51ebebeb,
+ 0x4aededed, 0x42efefef, 0x3af1f1f1, 0x32f3f3f3, 0x2af5f5f5,
+ 0x23f6f6f6, 0x1cf8f8f8, 0x16fafafa, 0x11fbfbfb, 0x0dfcfcfc,
+ 0x09fdfdfd, 0x0cfcfcfc, 0x10fbfbfb, 0x16fafafa, 0x1cf8f8f8,
+ 0x23f6f6f6, 0x2cf4f4f4, 0x35f2f2f2, 0x3ef0f0f0, 0x48ededed,
+ 0x51ebebeb, 0x5ae9e9e9, 0x62e7e7e7, 0x6ae5e5e5, 0x71e3e3e3,
+ 0x77e2e2e2, 0x7be1e1e1, 0x7fe0e0e0, 0x82dfdfdf, 0x85dedede,
+ 0x86dedede, 0x88dedede, 0x88dddddd, 0x89dddddd, 0x89dddddd,
+ 0x89dddddd, 0x8adddddd, 0x8adddddd, 0x8adddddd, 0x8adddddd,
+ 0x8adddddd, 0x8adddddd, 0x8adddddd, 0x8adddddd, 0x8adddddd,
+ 0x8adddddd, 0x89dddddd, 0x89dddddd, 0x89dddddd, 0x88dddddd,
+ 0x88dedede, 0x86dedede, 0x85dedede, 0x82dfdfdf, 0x7fe0e0e0,
+ 0x7be1e1e1, 0x77e2e2e2, 0x71e3e3e3, 0x6ae5e5e5, 0x62e7e7e7,
+ 0x5ae9e9e9, 0x51ebebeb, 0x48ededed, 0x3ef0f0f0, 0x35f2f2f2,
+ 0x2cf4f4f4, 0x23f6f6f6, 0x1cf8f8f8, 0x16fafafa, 0x10fbfbfb,
+ 0x0cfcfcfc, 0x0ffbfbfb, 0x14fafafa, 0x1bf8f8f8, 0x23f6f6f6,
+ 0x2cf4f4f4, 0x35f2f2f2, 0x40efefef, 0x4bededed, 0x56eaeaea,
+ 0x60e7e7e7, 0x6ae5e5e5, 0x74e2e2e2, 0x7ce0e0e0, 0x83dfdfdf,
+ 0x8adddddd, 0x8fdcdcdc, 0x93dbdbdb, 0x96dadada, 0x98d9d9d9,
+ 0x9ad9d9d9, 0x9bd9d9d9, 0x9cd8d8d8, 0x9dd8d8d8, 0x9dd8d8d8,
+ 0x9dd8d8d8, 0x9ed8d8d8, 0x9ed8d8d8, 0x9ed8d8d8, 0x9ed8d8d8,
+ 0x9ed8d8d8, 0x9ed8d8d8, 0x9ed8d8d8, 0x9ed8d8d8, 0x9ed8d8d8,
+ 0x9ed8d8d8, 0x9dd8d8d8, 0x9dd8d8d8, 0x9dd8d8d8, 0x9cd8d8d8,
+ 0x9bd9d9d9, 0x9ad9d9d9, 0x98d9d9d9, 0x96dadada, 0x93dbdbdb,
+ 0x8fdcdcdc, 0x8adddddd, 0x83dfdfdf, 0x7ce0e0e0, 0x74e2e2e2,
+ 0x6ae5e5e5, 0x60e7e7e7, 0x56eaeaea, 0x4bededed, 0x40efefef,
+ 0x35f2f2f2, 0x2cf4f4f4, 0x23f6f6f6, 0x1bf8f8f8, 0x14fafafa,
+ 0x0ffbfbfb, 0x13fafafa, 0x19f9f9f9, 0x21f7f7f7, 0x2af5f5f5,
+ 0x35f2f2f2, 0x40efefef, 0x4cececec, 0x58e9e9e9, 0x64e6e6e6,
+ 0x70e3e3e3, 0x7be1e1e1, 0x85dedede, 0x8edcdcdc, 0x96dadada,
+ 0x9cd8d8d8, 0xa2d7d7d7, 0xa6d6d6d6, 0xa9d5d5d5, 0xabd5d5d5,
+ 0xadd4d4d4, 0xaed4d4d4, 0xafd4d4d4, 0xb0d4d4d4, 0xb0d3d3d3,
+ 0xb0d3d3d3, 0xb0d3d3d3, 0xb0d3d3d3, 0xb0d3d3d3, 0xb0d3d3d3,
+ 0xb0d3d3d3, 0xb0d3d3d3, 0xb0d3d3d3, 0xb0d3d3d3, 0xb0d3d3d3,
+ 0xb0d3d3d3, 0xb0d3d3d3, 0xb0d3d3d3, 0xb0d4d4d4, 0xafd4d4d4,
+ 0xaed4d4d4, 0xadd4d4d4, 0xabd5d5d5, 0xa9d5d5d5, 0xa6d6d6d6,
+ 0xa2d7d7d7, 0x9cd8d8d8, 0x96dadada, 0x8edcdcdc, 0x85dedede,
+ 0x7be1e1e1, 0x70e3e3e3, 0x64e6e6e6, 0x58e9e9e9, 0x4cececec,
+ 0x40efefef, 0x35f2f2f2, 0x2af5f5f5, 0x21f7f7f7, 0x19f9f9f9,
+ 0x13fafafa, 0x16f9f9f9, 0x1ef8f8f8, 0x27f5f5f5, 0x32f3f3f3,
+ 0x3ef0f0f0, 0x4bededed, 0x58e9e9e9, 0x66e6e6e6, 0x73e3e3e3,
+ 0x80dfdfdf, 0x8bdddddd, 0x96dadada, 0x9fd8d8d8, 0xa7d6d6d6,
+ 0xaed4d4d4, 0xb3d3d3d3, 0xb7d2d2d2, 0xbad1d1d1, 0xbdd0d0d0,
+ 0xbed0d0d0, 0xc0d0d0d0, 0xc0cfcfcf, 0xc1cfcfcf, 0xc1cfcfcf,
+ 0xc1cfcfcf, 0xc1cfcfcf, 0xc1cfcfcf, 0xc2cfcfcf, 0xc2cfcfcf,
+ 0xc2cfcfcf, 0xc2cfcfcf, 0xc2cfcfcf, 0xc2cfcfcf, 0xc1cfcfcf,
+ 0xc1cfcfcf, 0xc1cfcfcf, 0xc1cfcfcf, 0xc1cfcfcf, 0xc0cfcfcf,
+ 0xc0d0d0d0, 0xbed0d0d0, 0xbdd0d0d0, 0xbad1d1d1, 0xb7d2d2d2,
+ 0xb3d3d3d3, 0xaed4d4d4, 0xa7d6d6d6, 0x9fd8d8d8, 0x96dadada,
+ 0x8bdddddd, 0x80dfdfdf, 0x73e3e3e3, 0x66e6e6e6, 0x58e9e9e9,
+ 0x4bededed, 0x3ef0f0f0, 0x32f3f3f3, 0x27f5f5f5, 0x1ef8f8f8,
+ 0x16f9f9f9, 0x1bf8f8f8, 0x24f6f6f6, 0x2ef4f4f4, 0x3af1f1f1,
+ 0x47ededed, 0x56eaeaea, 0x64e6e6e6, 0x73e3e3e3, 0x81dfdfdf,
+ 0x8fdcdcdc, 0x9bd9d9d9, 0xa6d6d6d6, 0xafd4d4d4, 0xb7d2d2d2,
+ 0xbed0d0d0, 0xc3cfcfcf, 0xc7cecece, 0xcacdcdcd, 0xcccdcdcd,
+ 0xcecccccc, 0xcfcccccc, 0xcfcccccc, 0xd0cccccc, 0xd0cccccc,
+ 0xd0cccccc, 0xd0cccccc, 0xd0cccccc, 0xd0cccccc, 0xd0cccccc,
+ 0xd0cccccc, 0xd0cccccc, 0xd0cccccc, 0xd0cccccc, 0xd0cccccc,
+ 0xd0cccccc, 0xd0cccccc, 0xd0cccccc, 0xd0cccccc, 0xcfcccccc,
+ 0xcfcccccc, 0xcecccccc, 0xcccdcdcd, 0xcacdcdcd, 0xc7cecece,
+ 0xc3cfcfcf, 0xbed0d0d0, 0xb7d2d2d2, 0xafd4d4d4, 0xa6d6d6d6,
+ 0x9bd9d9d9, 0x8fdcdcdc, 0x81dfdfdf, 0x73e3e3e3, 0x64e6e6e6,
+ 0x56eaeaea, 0x47ededed, 0x3af1f1f1, 0x2ef4f4f4, 0x24f6f6f6,
+ 0x1bf8f8f8, 0x1ff7f7f7, 0x29f5f5f5, 0x35f2f2f2, 0x42efefef,
+ 0x51ebebeb, 0x60e7e7e7, 0x70e3e3e3, 0x80dfdfdf, 0x8fdcdcdc,
+ 0x9cd8d8d8, 0xa9d5d5d5, 0xb4d2d2d2, 0xbdd0d0d0, 0xc5cecece,
+ 0xcbcdcdcd, 0xd0cccccc, 0xd4cbcbcb, 0xd7cacaca, 0xd9c9c9c9,
+ 0xdac9c9c9, 0xdbc9c9c9, 0xdcc9c9c9, 0xdcc9c9c9, 0xdcc9c9c9,
+ 0xddc9c9c9, 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8,
+ 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8,
+ 0xddc8c8c8, 0xddc9c9c9, 0xdcc9c9c9, 0xdcc9c9c9, 0xdcc9c9c9,
+ 0xdbc9c9c9, 0xdac9c9c9, 0xd9c9c9c9, 0xd7cacaca, 0xd4cbcbcb,
+ 0xd0cccccc, 0xcbcdcdcd, 0xc5cecece, 0xbdd0d0d0, 0xb4d2d2d2,
+ 0xa9d5d5d5, 0x9cd8d8d8, 0x8fdcdcdc, 0x80dfdfdf, 0x70e3e3e3,
+ 0x60e7e7e7, 0x51ebebeb, 0x42efefef, 0x35f2f2f2, 0x29f5f5f5,
+ 0x1ff7f7f7, 0x23f6f6f6, 0x2ff4f4f4, 0x3bf0f0f0, 0x4aededed,
+ 0x5ae9e9e9, 0x6ae5e5e5, 0x7be0e0e0, 0x8bdcdcdc, 0x9bd9d9d9,
+ 0xa9d5d5d5, 0xb6d2d2d2, 0xc0cfcfcf, 0xcacdcdcd, 0xd1cbcbcb,
+ 0xd7cacaca, 0xdcc9c9c9, 0xdfc8c8c8, 0xe1c7c7c7, 0xe3c7c7c7,
+ 0xe5c7c7c7, 0xe5c6c6c6, 0xe6c6c6c6, 0xe6c6c6c6, 0xe6c6c6c6,
+ 0xe6c6c6c6, 0xe7c6c6c6, 0xe7c6c6c6, 0xe7c6c6c6, 0xe7c6c6c6,
+ 0xe7c6c6c6, 0xe7c6c6c6, 0xe7c6c6c6, 0xe7c6c6c6, 0xe7c6c6c6,
+ 0xe7c6c6c6, 0xe6c6c6c6, 0xe6c6c6c6, 0xe6c6c6c6, 0xe6c6c6c6,
+ 0xe5c6c6c6, 0xe5c7c7c7, 0xe3c7c7c7, 0xe1c7c7c7, 0xdfc8c8c8,
+ 0xdcc9c9c9, 0xd7cacaca, 0xd1cbcbcb, 0xcacdcdcd, 0xc0cfcfcf,
+ 0xb6d2d2d2, 0xa9d5d5d5, 0x9bd9d9d9, 0x8bdcdcdc, 0x7be0e0e0,
+ 0x6ae5e5e5, 0x5ae9e9e9, 0x4aededed, 0x3bf0f0f0, 0x2ff4f4f4,
+ 0x23f6f6f6, 0x27f5f5f5, 0x34f2f2f2, 0x42efefef, 0x51ebebeb,
+ 0x62e7e7e7, 0x74e2e2e2, 0x85dedede, 0x96dadada, 0xa6d6d6d6,
+ 0xb4d2d2d2, 0xc1cfcfcf, 0xcbcdcdcd, 0xd4cbcbcb, 0xdbc9c9c9,
+ 0xe0c8c8c8, 0xe5c7c7c7, 0xe8c6c6c6, 0xeac5c5c5, 0xecc5c5c5,
+ 0xedc5c5c5, 0xedc4c4c4, 0xeec4c4c4, 0xeec4c4c4, 0xeec4c4c4,
+ 0xeec4c4c4, 0xeec4c4c4, 0xeec4c4c4, 0xeec4c4c4, 0xeec4c4c4,
+ 0xeec4c4c4, 0xeec4c4c4, 0xeec4c4c4, 0xeec4c4c4, 0xeec4c4c4,
+ 0xeec4c4c4, 0xeec4c4c4, 0xeec4c4c4, 0xeec4c4c4, 0xeec4c4c4,
+ 0xedc4c4c4, 0xedc5c5c5, 0xecc5c5c5, 0xeac5c5c5, 0xe8c6c6c6,
+ 0xe5c7c7c7, 0xe0c8c8c8, 0xdbc9c9c9, 0xd4cbcbcb, 0xcbcdcdcd,
+ 0xc1cfcfcf, 0xb4d2d2d2, 0xa6d6d6d6, 0x96dadada, 0x85dedede,
+ 0x74e2e2e2, 0x62e7e7e7, 0x51ebebeb, 0x42efefef, 0x34f2f2f2,
+ 0x27f5f5f5, 0x2bf4f4f4, 0x39f1f1f1, 0x47ededed, 0x58e9e9e9,
+ 0x6ae5e5e5, 0x7ce0e0e0, 0x8edcdcdc, 0x9fd8d8d8, 0xafd4d4d4,
+ 0xbdd0d0d0, 0xcacdcdcd, 0xd4cbcbcb, 0xdcc9c9c9, 0xe3c7c7c7,
+ 0xe8c6c6c6, 0xecc5c5c5, 0xefc4c4c4, 0xf0c4c4c4, 0xf2c3c3c3,
+ 0xf3c3c3c3, 0xf3c3c3c3, 0xf3c3c3c3, 0xf4c3c3c3, 0xf4c3c3c3,
+ 0xf4c3c3c3, 0xf4c3c3c3, 0xf4c3c3c3, 0xf4c3c3c3, 0xf4c3c3c3,
+ 0xf4c3c3c3, 0xf4c3c3c3, 0xf4c3c3c3, 0xf4c3c3c3, 0xf4c3c3c3,
+ 0xf4c3c3c3, 0xf4c3c3c3, 0xf4c3c3c3, 0xf4c3c3c3, 0xf3c3c3c3,
+ 0xf3c3c3c3, 0xf3c3c3c3, 0xf2c3c3c3, 0xf0c4c4c4, 0xefc4c4c4,
+ 0xecc5c5c5, 0xe8c6c6c6, 0xe3c7c7c7, 0xdcc9c9c9, 0xd4cbcbcb,
+ 0xcacdcdcd, 0xbdd0d0d0, 0xafd4d4d4, 0x9fd8d8d8, 0x8edcdcdc,
+ 0x7ce0e0e0, 0x6ae5e5e5, 0x58e9e9e9, 0x47ededed, 0x39f1f1f1,
+ 0x2bf4f4f4, 0x2ff4f4f4, 0x3df0f0f0, 0x4dececec, 0x5ee8e8e8,
+ 0x71e3e3e3, 0x84dfdfdf, 0x96dadada, 0xa7d6d6d6, 0xb7d2d2d2,
+ 0xc5cecece, 0xd1cbcbcb, 0xdbc9c9c9, 0xe3c7c7c7, 0xe9c6c6c6,
+ 0xeec4c4c4, 0xf1c4c4c4, 0xf4c3c3c3, 0xf5c2c2c2, 0xf6c2c2c2,
+ 0xf7c2c2c2, 0xf7c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2,
+ 0xf8c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2,
+ 0xf8c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2,
+ 0xf8c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2,
+ 0xf7c2c2c2, 0xf7c2c2c2, 0xf6c2c2c2, 0xf5c2c2c2, 0xf4c3c3c3,
+ 0xf1c4c4c4, 0xeec4c4c4, 0xe9c6c6c6, 0xe3c7c7c7, 0xdbc9c9c9,
+ 0xd1cbcbcb, 0xc5cecece, 0xb7d2d2d2, 0xa7d6d6d6, 0x96dadada,
+ 0x84dfdfdf, 0x71e3e3e3, 0x5ee8e8e8, 0x4dececec, 0x3df0f0f0,
+ 0x2ff4f4f4, 0x32f3f3f3, 0x41efefef, 0x51ebebeb, 0x63e6e6e6,
+ 0x77e2e2e2, 0x8adddddd, 0x9cd8d8d8, 0xaed4d4d4, 0xbdd0d0d0,
+ 0xcbcdcdcd, 0xd7cacaca, 0xe0c7c7c7, 0xe8c6c6c6, 0xeec4c4c4,
+ 0xf2c3c3c3, 0xf5c3c3c3, 0xf7c2c2c2, 0xf8c2c2c2, 0xf9c1c1c1,
+ 0xfac1c1c1, 0xfac1c1c1, 0xfac1c1c1, 0xfbc1c1c1, 0xfbc1c1c1,
+ 0xfbc1c1c1, 0xfbc1c1c1, 0xfbc1c1c1, 0xfbc1c1c1, 0xfbc1c1c1,
+ 0xfbc1c1c1, 0xfbc1c1c1, 0xfbc1c1c1, 0xfbc1c1c1, 0xfbc1c1c1,
+ 0xfbc1c1c1, 0xfbc1c1c1, 0xfbc1c1c1, 0xfbc1c1c1, 0xfac1c1c1,
+ 0xfac1c1c1, 0xfac1c1c1, 0xf9c1c1c1, 0xf8c2c2c2, 0xf7c2c2c2,
+ 0xf5c3c3c3, 0xf2c3c3c3, 0xeec4c4c4, 0xe8c6c6c6, 0xe0c7c7c7,
+ 0xd7cacaca, 0xcbcdcdcd, 0xbdd0d0d0, 0xaed4d4d4, 0x9cd8d8d8,
+ 0x8adddddd, 0x77e2e2e2, 0x63e6e6e6, 0x51ebebeb, 0x41efefef,
+ 0x32f3f3f3, 0x34f2f2f2, 0x44eeeeee, 0x55eaeaea, 0x68e5e5e5,
+ 0x7be1e1e1, 0x8fdcdcdc, 0xa1d7d7d7, 0xb3d3d3d3, 0xc2cfcfcf,
+ 0xd0cbcbcb, 0xdcc9c9c9, 0xe4c6c6c6, 0xecc5c5c5, 0xf1c4c4c4,
+ 0xf5c3c3c3, 0xf8c2c2c2, 0xfac1c1c1, 0xfac1c1c1, 0xfcc1c1c1,
+ 0xfcc1c1c1, 0xfcc1c1c1, 0xfcc1c1c1, 0xfcc1c1c1, 0xfcc1c1c1,
+ 0xfdc1c1c1, 0xfdc1c1c1, 0xfdc1c1c1, 0xfdc1c1c1, 0xfdc1c1c1,
+ 0xfdc1c1c1, 0xfdc1c1c1, 0xfdc1c1c1, 0xfdc1c1c1, 0xfdc1c1c1,
+ 0xfdc1c1c1, 0xfdc1c1c1, 0xfcc1c1c1, 0xfcc1c1c1, 0xfcc1c1c1,
+ 0xfcc1c1c1, 0xfcc1c1c1, 0xfcc1c1c1, 0xfac1c1c1, 0xfac1c1c1,
+ 0xf8c2c2c2, 0xf5c3c3c3, 0xf1c4c4c4, 0xecc5c5c5, 0xe4c6c6c6,
+ 0xdcc9c9c9, 0xd0cbcbcb, 0xc2cfcfcf, 0xb3d3d3d3, 0xa1d7d7d7,
+ 0x8fdcdcdc, 0x7be1e1e1, 0x68e5e5e5, 0x55eaeaea, 0x44eeeeee,
+ 0x34f2f2f2, 0x37f2f2f2, 0x47eeeeee, 0x58e9e9e9, 0x6be4e4e4,
+ 0x7fe0e0e0, 0x93dbdbdb, 0xa5d6d6d6, 0xb7d2d2d2, 0xc6cecece,
+ 0xd4cacaca, 0xdfc8c8c8, 0xe7c6c6c6, 0xeec4c4c4, 0xf3c3c3c3,
+ 0xf7c2c2c2, 0xfac2c2c2, 0xfbc1c1c1, 0xfcc1c1c1, 0xfdc0c0c0,
+ 0xfdc0c0c0, 0xfdc0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc0c0c0, 0xfdc0c0c0, 0xfdc0c0c0, 0xfcc1c1c1, 0xfbc1c1c1,
+ 0xfac2c2c2, 0xf7c2c2c2, 0xf3c3c3c3, 0xeec4c4c4, 0xe7c6c6c6,
+ 0xdfc8c8c8, 0xd4cacaca, 0xc6cecece, 0xb7d2d2d2, 0xa5d6d6d6,
+ 0x93dbdbdb, 0x7fe0e0e0, 0x6be4e4e4, 0x58e9e9e9, 0x47eeeeee,
+ 0x37f2f2f2, 0x38f1f1f1, 0x49ededed, 0x5be9e9e9, 0x6ee4e4e4,
+ 0x82dfdfdf, 0x96dadada, 0xa9d5d5d5, 0xbbd1d1d1, 0xc9cecece,
+ 0xd7cacaca, 0xe2c7c7c7, 0xeac5c5c5, 0xf0c4c4c4, 0xf5c3c3c3,
+ 0xf9c2c2c2, 0xfbc1c1c1, 0xfcc0c0c0, 0xfdc0c0c0, 0xfec0c0c0,
+ 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfdc0c0c0, 0xfcc0c0c0,
+ 0xfbc1c1c1, 0xf9c2c2c2, 0xf5c3c3c3, 0xf0c4c4c4, 0xeac5c5c5,
+ 0xe2c7c7c7, 0xd7cacaca, 0xc9cecece, 0xbbd1d1d1, 0xa9d5d5d5,
+ 0x96dadada, 0x82dfdfdf, 0x6ee4e4e4, 0x5be9e9e9, 0x49ededed,
+ 0x38f1f1f1, 0x3af1f1f1, 0x4bededed, 0x5de8e8e8, 0x70e3e3e3,
+ 0x85dedede, 0x99d9d9d9, 0xabd4d4d4, 0xbdd0d0d0, 0xcccdcdcd,
+ 0xd9c9c9c9, 0xe4c7c7c7, 0xebc5c5c5, 0xf2c4c4c4, 0xf6c2c2c2,
+ 0xfac1c1c1, 0xfcc1c1c1, 0xfdc0c0c0, 0xfdc0c0c0, 0xfec0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfdc0c0c0, 0xfdc0c0c0,
+ 0xfcc1c1c1, 0xfac1c1c1, 0xf6c2c2c2, 0xf2c4c4c4, 0xebc5c5c5,
+ 0xe4c7c7c7, 0xd9c9c9c9, 0xcccdcdcd, 0xbdd0d0d0, 0xabd4d4d4,
+ 0x99d9d9d9, 0x85dedede, 0x70e3e3e3, 0x5de8e8e8, 0x4bededed,
+ 0x3af1f1f1, 0x3bf1f1f1, 0x4cededed, 0x5ee8e8e8, 0x72e3e3e3,
+ 0x87dedede, 0x9ad9d9d9, 0xadd4d4d4, 0xbfd0d0d0, 0xcdcdcdcd,
+ 0xdac9c9c9, 0xe5c7c7c7, 0xecc4c4c4, 0xf3c3c3c3, 0xf7c2c2c2,
+ 0xfac1c1c1, 0xfcc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfcc1c1c1, 0xfac1c1c1, 0xf7c2c2c2, 0xf3c3c3c3, 0xecc4c4c4,
+ 0xe5c7c7c7, 0xdac9c9c9, 0xcdcdcdcd, 0xbfd0d0d0, 0xadd4d4d4,
+ 0x9ad9d9d9, 0x87dedede, 0x72e3e3e3, 0x5ee8e8e8, 0x4cededed,
+ 0x3bf1f1f1, 0x3cf0f0f0, 0x4dececec, 0x5fe7e7e7, 0x73e3e3e3,
+ 0x88dedede, 0x9cd9d9d9, 0xaed4d4d4, 0xc0cfcfcf, 0xcecccccc,
+ 0xdbc8c8c8, 0xe6c6c6c6, 0xedc4c4c4, 0xf3c3c3c3, 0xf7c2c2c2,
+ 0xfbc1c1c1, 0xfdc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc1c1c1, 0xfbc1c1c1, 0xf7c2c2c2, 0xf3c3c3c3, 0xedc4c4c4,
+ 0xe6c6c6c6, 0xdbc8c8c8, 0xcecccccc, 0xc0cfcfcf, 0xaed4d4d4,
+ 0x9cd9d9d9, 0x88dedede, 0x73e3e3e3, 0x5fe7e7e7, 0x4dececec,
+ 0x3cf0f0f0, 0x3cf0f0f0, 0x4eececec, 0x60e7e7e7, 0x74e2e2e2,
+ 0x89dddddd, 0x9dd8d8d8, 0xafd3d3d3, 0xc1cfcfcf, 0xcfcccccc,
+ 0xdcc8c8c8, 0xe6c6c6c6, 0xedc4c4c4, 0xf4c3c3c3, 0xf8c2c2c2,
+ 0xfbc1c1c1, 0xfdc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc1c1c1, 0xfbc1c1c1, 0xf8c2c2c2, 0xf4c3c3c3, 0xedc4c4c4,
+ 0xe6c6c6c6, 0xdcc8c8c8, 0xcfcccccc, 0xc1cfcfcf, 0xafd3d3d3,
+ 0x9dd8d8d8, 0x89dddddd, 0x74e2e2e2, 0x60e7e7e7, 0x4eececec,
+ 0x3cf0f0f0, 0x3cf0f0f0, 0x4eececec, 0x60e7e7e7, 0x74e2e2e2,
+ 0x89dddddd, 0x9dd8d8d8, 0xafd3d3d3, 0xc1cfcfcf, 0xcfcccccc,
+ 0xdcc8c8c8, 0xe7c6c6c6, 0xeec4c4c4, 0xf4c3c3c3, 0xf8c2c2c2,
+ 0xfbc1c1c1, 0xfdc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc1c1c1, 0xfbc1c1c1, 0xf8c2c2c2, 0xf4c3c3c3, 0xeec4c4c4,
+ 0xe7c6c6c6, 0xdcc8c8c8, 0xcfcccccc, 0xc1cfcfcf, 0xafd3d3d3,
+ 0x9dd8d8d8, 0x89dddddd, 0x74e2e2e2, 0x60e7e7e7, 0x4eececec,
+ 0x3cf0f0f0, 0x3df0f0f0, 0x4fececec, 0x61e7e7e7, 0x75e2e2e2,
+ 0x8adddddd, 0x9ed8d8d8, 0xb0d3d3d3, 0xc2cfcfcf, 0xd0cccccc,
+ 0xddc8c8c8, 0xe7c6c6c6, 0xeec4c4c4, 0xf4c3c3c3, 0xf8c2c2c2,
+ 0xfbc1c1c1, 0xfdc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc1c1c1, 0xfbc1c1c1, 0xf8c2c2c2, 0xf4c3c3c3, 0xeec4c4c4,
+ 0xe7c6c6c6, 0xddc8c8c8, 0xd0cccccc, 0xc2cfcfcf, 0xb0d3d3d3,
+ 0x9ed8d8d8, 0x8adddddd, 0x75e2e2e2, 0x61e7e7e7, 0x4fececec,
+ 0x3df0f0f0, 0x3df0f0f0, 0x4fececec, 0x61e7e7e7, 0x75e2e2e2,
+ 0x8adddddd, 0x9ed8d8d8, 0xb0d3d3d3, 0xc2cfcfcf, 0xd0cccccc,
+ 0xddc8c8c8, 0xe7c6c6c6, 0xeec4c4c4, 0xf4c3c3c3, 0xf8c2c2c2,
+ 0xfbc1c1c1, 0xfdc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc1c1c1, 0xfbc1c1c1, 0xf8c2c2c2, 0xf4c3c3c3, 0xeec4c4c4,
+ 0xe7c6c6c6, 0xddc8c8c8, 0xd0cccccc, 0xc2cfcfcf, 0xb0d3d3d3,
+ 0x9ed8d8d8, 0x8adddddd, 0x75e2e2e2, 0x61e7e7e7, 0x4fececec,
+ 0x3df0f0f0, 0x3df0f0f0, 0x4fececec, 0x61e7e7e7, 0x75e2e2e2,
+ 0x8adddddd, 0x9ed8d8d8, 0xb0d3d3d3, 0xc2cfcfcf, 0xd0cccccc,
+ 0xddc8c8c8, 0xe7c6c6c6, 0xeec4c4c4, 0xf4c3c3c3, 0xf8c2c2c2,
+ 0xfbc1c1c1, 0xfdc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc1c1c1, 0xfbc1c1c1, 0xf8c2c2c2, 0xf4c3c3c3, 0xeec4c4c4,
+ 0xe7c6c6c6, 0xddc8c8c8, 0xd0cccccc, 0xc2cfcfcf, 0xb0d3d3d3,
+ 0x9ed8d8d8, 0x8adddddd, 0x75e2e2e2, 0x61e7e7e7, 0x4fececec,
+ 0x3df0f0f0, 0x3df0f0f0, 0x4fececec, 0x61e7e7e7, 0x75e2e2e2,
+ 0x8adddddd, 0x9ed8d8d8, 0xb0d3d3d3, 0xc2cfcfcf, 0xd0cccccc,
+ 0xddc8c8c8, 0xe7c6c6c6, 0xeec4c4c4, 0xf4c3c3c3, 0xf8c2c2c2,
+ 0xfbc1c1c1, 0xfdc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc1c1c1, 0xfbc1c1c1, 0xf8c2c2c2, 0xf4c3c3c3, 0xeec4c4c4,
+ 0xe7c6c6c6, 0xddc8c8c8, 0xd0cccccc, 0xc2cfcfcf, 0xb0d3d3d3,
+ 0x9ed8d8d8, 0x8adddddd, 0x75e2e2e2, 0x61e7e7e7, 0x4fececec,
+ 0x3df0f0f0, 0x3df0f0f0, 0x4fececec, 0x61e7e7e7, 0x75e2e2e2,
+ 0x8adddddd, 0x9ed8d8d8, 0xb0d3d3d3, 0xc2cfcfcf, 0xd0cccccc,
+ 0xddc8c8c8, 0xe7c6c6c6, 0xeec4c4c4, 0xf4c3c3c3, 0xf8c2c2c2,
+ 0xfbc1c1c1, 0xfdc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc1c1c1, 0xfbc1c1c1, 0xf8c2c2c2, 0xf4c3c3c3, 0xeec4c4c4,
+ 0xe7c6c6c6, 0xddc8c8c8, 0xd0cccccc, 0xc2cfcfcf, 0xb0d3d3d3,
+ 0x9ed8d8d8, 0x8adddddd, 0x75e2e2e2, 0x61e7e7e7, 0x4fececec,
+ 0x3df0f0f0, 0x3df0f0f0, 0x4fececec, 0x61e7e7e7, 0x75e2e2e2,
+ 0x8adddddd, 0x9ed8d8d8, 0xb0d3d3d3, 0xc2cfcfcf, 0xd0cccccc,
+ 0xddc8c8c8, 0xe7c6c6c6, 0xeec4c4c4, 0xf4c3c3c3, 0xf8c2c2c2,
+ 0xfbc1c1c1, 0xfdc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc1c1c1, 0xfbc1c1c1, 0xf8c2c2c2, 0xf4c3c3c3, 0xeec4c4c4,
+ 0xe7c6c6c6, 0xddc8c8c8, 0xd0cccccc, 0xc2cfcfcf, 0xb0d3d3d3,
+ 0x9ed8d8d8, 0x8adddddd, 0x75e2e2e2, 0x61e7e7e7, 0x4fececec,
+ 0x3df0f0f0, 0x3df0f0f0, 0x4fececec, 0x61e7e7e7, 0x75e2e2e2,
+ 0x8adddddd, 0x9ed8d8d8, 0xb0d3d3d3, 0xc2cfcfcf, 0xd0cccccc,
+ 0xddc8c8c8, 0xe7c6c6c6, 0xeec4c4c4, 0xf4c3c3c3, 0xf8c2c2c2,
+ 0xfbc1c1c1, 0xfdc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc1c1c1, 0xfbc1c1c1, 0xf8c2c2c2, 0xf4c3c3c3, 0xeec4c4c4,
+ 0xe7c6c6c6, 0xddc8c8c8, 0xd0cccccc, 0xc2cfcfcf, 0xb0d3d3d3,
+ 0x9ed8d8d8, 0x8adddddd, 0x75e2e2e2, 0x61e7e7e7, 0x4fececec,
+ 0x3df0f0f0, 0x3df0f0f0, 0x4fececec, 0x61e7e7e7, 0x75e2e2e2,
+ 0x8adddddd, 0x9ed8d8d8, 0xb0d3d3d3, 0xc2cfcfcf, 0xd0cccccc,
+ 0xddc8c8c8, 0xe7c6c6c6, 0xeec4c4c4, 0xf4c3c3c3, 0xf8c2c2c2,
+ 0xfbc1c1c1, 0xfdc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc1c1c1, 0xfbc1c1c1, 0xf8c2c2c2, 0xf4c3c3c3, 0xeec4c4c4,
+ 0xe7c6c6c6, 0xddc8c8c8, 0xd0cccccc, 0xc2cfcfcf, 0xb0d3d3d3,
+ 0x9ed8d8d8, 0x8adddddd, 0x75e2e2e2, 0x61e7e7e7, 0x4fececec,
+ 0x3df0f0f0, 0x3df0f0f0, 0x4fececec, 0x61e7e7e7, 0x75e2e2e2,
+ 0x8adddddd, 0x9ed8d8d8, 0xb0d3d3d3, 0xc2cfcfcf, 0xd0cccccc,
+ 0xddc8c8c8, 0xe7c6c6c6, 0xeec4c4c4, 0xf4c3c3c3, 0xf8c2c2c2,
+ 0xfbc1c1c1, 0xfdc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc1c1c1, 0xfbc1c1c1, 0xf8c2c2c2, 0xf4c3c3c3, 0xeec4c4c4,
+ 0xe7c6c6c6, 0xddc8c8c8, 0xd0cccccc, 0xc2cfcfcf, 0xb0d3d3d3,
+ 0x9ed8d8d8, 0x8adddddd, 0x75e2e2e2, 0x61e7e7e7, 0x4fececec,
+ 0x3df0f0f0, 0x3df0f0f0, 0x4fececec, 0x61e7e7e7, 0x75e2e2e2,
+ 0x8adddddd, 0x9ed8d8d8, 0xb0d3d3d3, 0xc2cfcfcf, 0xd0cccccc,
+ 0xddc8c8c8, 0xe7c6c6c6, 0xeec4c4c4, 0xf4c3c3c3, 0xf8c2c2c2,
+ 0xfbc1c1c1, 0xfdc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc1c1c1, 0xfbc1c1c1, 0xf8c2c2c2, 0xf4c3c3c3, 0xeec4c4c4,
+ 0xe7c6c6c6, 0xddc8c8c8, 0xd0cccccc, 0xc2cfcfcf, 0xb0d3d3d3,
+ 0x9ed8d8d8, 0x8adddddd, 0x75e2e2e2, 0x61e7e7e7, 0x4fececec,
+ 0x3df0f0f0, 0x3df0f0f0, 0x4fececec, 0x61e7e7e7, 0x75e2e2e2,
+ 0x8adddddd, 0x9ed8d8d8, 0xb0d3d3d3, 0xc2cfcfcf, 0xd0cccccc,
+ 0xddc8c8c8, 0xe7c6c6c6, 0xeec4c4c4, 0xf4c3c3c3, 0xf8c2c2c2,
+ 0xfbc1c1c1, 0xfdc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc1c1c1, 0xfbc1c1c1, 0xf8c2c2c2, 0xf4c3c3c3, 0xeec4c4c4,
+ 0xe7c6c6c6, 0xddc8c8c8, 0xd0cccccc, 0xc2cfcfcf, 0xb0d3d3d3,
+ 0x9ed8d8d8, 0x8adddddd, 0x75e2e2e2, 0x61e7e7e7, 0x4fececec,
+ 0x3df0f0f0, 0x3df0f0f0, 0x4fececec, 0x61e7e7e7, 0x75e2e2e2,
+ 0x8adddddd, 0x9ed8d8d8, 0xb0d3d3d3, 0xc2cfcfcf, 0xd0cccccc,
+ 0xddc8c8c8, 0xe7c6c6c6, 0xeec4c4c4, 0xf4c3c3c3, 0xf8c2c2c2,
+ 0xfbc1c1c1, 0xfdc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc1c1c1, 0xfbc1c1c1, 0xf8c2c2c2, 0xf4c3c3c3, 0xeec4c4c4,
+ 0xe7c6c6c6, 0xddc8c8c8, 0xd0cccccc, 0xc2cfcfcf, 0xb0d3d3d3,
+ 0x9ed8d8d8, 0x8adddddd, 0x75e2e2e2, 0x61e7e7e7, 0x4fececec,
+ 0x3df0f0f0, 0x3df0f0f0, 0x4fececec, 0x61e7e7e7, 0x75e2e2e2,
+ 0x8adddddd, 0x9ed8d8d8, 0xb0d3d3d3, 0xc2cfcfcf, 0xd0cccccc,
+ 0xddc8c8c8, 0xe7c6c6c6, 0xeec4c4c4, 0xf4c3c3c3, 0xf8c2c2c2,
+ 0xfbc1c1c1, 0xfdc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc1c1c1, 0xfbc1c1c1, 0xf8c2c2c2, 0xf4c3c3c3, 0xeec4c4c4,
+ 0xe7c6c6c6, 0xddc8c8c8, 0xd0cccccc, 0xc2cfcfcf, 0xb0d3d3d3,
+ 0x9ed8d8d8, 0x8adddddd, 0x75e2e2e2, 0x61e7e7e7, 0x4fececec,
+ 0x3df0f0f0, 0x3df0f0f0, 0x4fececec, 0x61e7e7e7, 0x75e2e2e2,
+ 0x8adddddd, 0x9ed8d8d8, 0xb0d3d3d3, 0xc2cfcfcf, 0xd0cccccc,
+ 0xddc8c8c8, 0xe7c6c6c6, 0xeec4c4c4, 0xf4c3c3c3, 0xf8c2c2c2,
+ 0xfbc1c1c1, 0xfdc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc1c1c1, 0xfbc1c1c1, 0xf8c2c2c2, 0xf4c3c3c3, 0xeec4c4c4,
+ 0xe7c6c6c6, 0xddc8c8c8, 0xd0cccccc, 0xc2cfcfcf, 0xb0d3d3d3,
+ 0x9ed8d8d8, 0x8adddddd, 0x75e2e2e2, 0x61e7e7e7, 0x4fececec,
+ 0x3df0f0f0, 0x3df0f0f0, 0x4fececec, 0x61e7e7e7, 0x75e2e2e2,
+ 0x8adddddd, 0x9ed8d8d8, 0xb0d3d3d3, 0xc2cfcfcf, 0xd0cccccc,
+ 0xddc8c8c8, 0xe7c6c6c6, 0xeec4c4c4, 0xf4c3c3c3, 0xf8c2c2c2,
+ 0xfbc1c1c1, 0xfdc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc1c1c1, 0xfbc1c1c1, 0xf8c2c2c2, 0xf4c3c3c3, 0xeec4c4c4,
+ 0xe7c6c6c6, 0xddc8c8c8, 0xd0cccccc, 0xc2cfcfcf, 0xb0d3d3d3,
+ 0x9ed8d8d8, 0x8adddddd, 0x75e2e2e2, 0x61e7e7e7, 0x4fececec,
+ 0x3df0f0f0, 0x3cf0f0f0, 0x4eececec, 0x60e7e7e7, 0x74e2e2e2,
+ 0x89dddddd, 0x9dd8d8d8, 0xafd3d3d3, 0xc1cfcfcf, 0xcfcccccc,
+ 0xdcc8c8c8, 0xe7c6c6c6, 0xeec4c4c4, 0xf4c3c3c3, 0xf8c2c2c2,
+ 0xfbc1c1c1, 0xfdc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc1c1c1, 0xfbc1c1c1, 0xf8c2c2c2, 0xf4c3c3c3, 0xeec4c4c4,
+ 0xe7c6c6c6, 0xdcc8c8c8, 0xcfcccccc, 0xc1cfcfcf, 0xafd3d3d3,
+ 0x9dd8d8d8, 0x89dddddd, 0x74e2e2e2, 0x60e7e7e7, 0x4eececec,
+ 0x3cf0f0f0, 0x3cf0f0f0, 0x4eececec, 0x60e7e7e7, 0x74e2e2e2,
+ 0x89dddddd, 0x9dd8d8d8, 0xafd3d3d3, 0xc1cfcfcf, 0xcfcccccc,
+ 0xdcc8c8c8, 0xe6c6c6c6, 0xedc4c4c4, 0xf4c3c3c3, 0xf8c2c2c2,
+ 0xfbc1c1c1, 0xfdc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc1c1c1, 0xfbc1c1c1, 0xf8c2c2c2, 0xf4c3c3c3, 0xedc4c4c4,
+ 0xe6c6c6c6, 0xdcc8c8c8, 0xcfcccccc, 0xc1cfcfcf, 0xafd3d3d3,
+ 0x9dd8d8d8, 0x89dddddd, 0x74e2e2e2, 0x60e7e7e7, 0x4eececec,
+ 0x3cf0f0f0, 0x3cf0f0f0, 0x4dececec, 0x5fe8e8e8, 0x73e3e3e3,
+ 0x88dedede, 0x9cd9d9d9, 0xaed4d4d4, 0xc0d0d0d0, 0xcecccccc,
+ 0xdbc8c8c8, 0xe6c6c6c6, 0xedc4c4c4, 0xf3c3c3c3, 0xf7c2c2c2,
+ 0xfbc1c1c1, 0xfdc1c1c1, 0xfec0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfdc1c1c1, 0xfbc1c1c1, 0xf7c2c2c2, 0xf3c3c3c3, 0xedc4c4c4,
+ 0xe6c6c6c6, 0xdbc8c8c8, 0xcecccccc, 0xc0d0d0d0, 0xaed4d4d4,
+ 0x9cd9d9d9, 0x88dedede, 0x73e3e3e3, 0x5fe8e8e8, 0x4dececec,
+ 0x3cf0f0f0, 0x3bf1f1f1, 0x4cededed, 0x5ee8e8e8, 0x72e3e3e3,
+ 0x86dedede, 0x9ad9d9d9, 0xadd4d4d4, 0xbfd0d0d0, 0xcdcdcdcd,
+ 0xdac9c9c9, 0xe5c7c7c7, 0xecc4c4c4, 0xf2c3c3c3, 0xf7c2c2c2,
+ 0xfac1c1c1, 0xfcc1c1c1, 0xfdc0c0c0, 0xfec0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0,
+ 0xffc0c0c0, 0xffc0c0c0, 0xffc0c0c0, 0xfec0c0c0, 0xfdc0c0c0,
+ 0xfcc1c1c1, 0xfac1c1c1, 0xf7c2c2c2, 0xf2c3c3c3, 0xecc4c4c4,
+ 0xe5c7c7c7, 0xdac9c9c9, 0xcdcdcdcd, 0xbfd0d0d0, 0xadd4d4d4,
+ 0x9ad9d9d9, 0x86dedede, 0x72e3e3e3, 0x5ee8e8e8, 0x4cededed,
+ 0x3bf1f1f1, 0x3af1f1f1, 0x4bededed, 0x5de8e8e8, 0x70e3e3e3,
+ 0x85dedede, 0x99d9d9d9, 0xabd4d4d4, 0xbdd0d0d0, 0xcbcdcdcd,
+ 0xd9c9c9c9, 0xe3c7c7c7, 0xebc5c5c5, 0xf1c4c4c4, 0xf6c3c3c3,
+ 0xf9c1c1c1, 0xfcc1c1c1, 0xfdc0c0c0, 0xfdc0c0c0, 0xfec0c0c0,
+ 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfdc0c0c0, 0xfdc0c0c0,
+ 0xfcc1c1c1, 0xf9c1c1c1, 0xf6c3c3c3, 0xf1c4c4c4, 0xebc5c5c5,
+ 0xe3c7c7c7, 0xd9c9c9c9, 0xcbcdcdcd, 0xbdd0d0d0, 0xabd4d4d4,
+ 0x99d9d9d9, 0x85dedede, 0x70e3e3e3, 0x5de8e8e8, 0x4bededed,
+ 0x3af1f1f1, 0x38f1f1f1, 0x49ededed, 0x5be9e9e9, 0x6ee4e4e4,
+ 0x82dfdfdf, 0x96dadada, 0xa8d5d5d5, 0xbad1d1d1, 0xc9cecece,
+ 0xd7cacaca, 0xe1c7c7c7, 0xe9c5c5c5, 0xf0c4c4c4, 0xf4c3c3c3,
+ 0xf8c2c2c2, 0xfac2c2c2, 0xfcc1c1c1, 0xfcc0c0c0, 0xfdc0c0c0,
+ 0xfdc0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0, 0xfec0c0c0,
+ 0xfec0c0c0, 0xfdc0c0c0, 0xfdc0c0c0, 0xfcc0c0c0, 0xfcc1c1c1,
+ 0xfac2c2c2, 0xf8c2c2c2, 0xf4c3c3c3, 0xf0c4c4c4, 0xe9c5c5c5,
+ 0xe1c7c7c7, 0xd7cacaca, 0xc9cecece, 0xbad1d1d1, 0xa8d5d5d5,
+ 0x96dadada, 0x82dfdfdf, 0x6ee4e4e4, 0x5be9e9e9, 0x49ededed,
+ 0x38f1f1f1, 0x37f2f2f2, 0x47eeeeee, 0x58e9e9e9, 0x6be5e5e5,
+ 0x7fe0e0e0, 0x93dbdbdb, 0xa5d6d6d6, 0xb7d2d2d2, 0xc6cecece,
+ 0xd3cacaca, 0xdec8c8c8, 0xe7c6c6c6, 0xeec5c5c5, 0xf2c3c3c3,
+ 0xf6c2c2c2, 0xf9c2c2c2, 0xfac1c1c1, 0xfbc1c1c1, 0xfcc1c1c1,
+ 0xfcc1c1c1, 0xfcc1c1c1, 0xfcc1c1c1, 0xfcc1c1c1, 0xfdc1c1c1,
+ 0xfdc1c1c1, 0xfdc1c1c1, 0xfdc1c1c1, 0xfdc1c1c1, 0xfdc1c1c1,
+ 0xfdc1c1c1, 0xfdc1c1c1, 0xfdc1c1c1, 0xfdc1c1c1, 0xfdc1c1c1,
+ 0xfdc1c1c1, 0xfdc1c1c1, 0xfdc1c1c1, 0xfcc1c1c1, 0xfcc1c1c1,
+ 0xfcc1c1c1, 0xfcc1c1c1, 0xfcc1c1c1, 0xfbc1c1c1, 0xfac1c1c1,
+ 0xf9c2c2c2, 0xf6c2c2c2, 0xf2c3c3c3, 0xeec5c5c5, 0xe7c6c6c6,
+ 0xdec8c8c8, 0xd3cacaca, 0xc6cecece, 0xb7d2d2d2, 0xa5d6d6d6,
+ 0x93dbdbdb, 0x7fe0e0e0, 0x6be5e5e5, 0x58e9e9e9, 0x47eeeeee,
+ 0x37f2f2f2, 0x34f2f2f2, 0x44eeeeee, 0x55eaeaea, 0x67e5e5e5,
+ 0x7be1e1e1, 0x8edcdcdc, 0xa1d7d7d7, 0xb3d3d3d3, 0xc2cfcfcf,
+ 0xcfcccccc, 0xdbc9c9c9, 0xe3c7c7c7, 0xeac5c5c5, 0xf0c4c4c4,
+ 0xf3c3c3c3, 0xf6c3c3c3, 0xf8c2c2c2, 0xf9c1c1c1, 0xfac1c1c1,
+ 0xfac1c1c1, 0xfac1c1c1, 0xfbc1c1c1, 0xfbc1c1c1, 0xfbc1c1c1,
+ 0xfbc1c1c1, 0xfbc1c1c1, 0xfbc1c1c1, 0xfbc1c1c1, 0xfbc1c1c1,
+ 0xfbc1c1c1, 0xfbc1c1c1, 0xfbc1c1c1, 0xfbc1c1c1, 0xfbc1c1c1,
+ 0xfbc1c1c1, 0xfbc1c1c1, 0xfbc1c1c1, 0xfbc1c1c1, 0xfbc1c1c1,
+ 0xfac1c1c1, 0xfac1c1c1, 0xfac1c1c1, 0xf9c1c1c1, 0xf8c2c2c2,
+ 0xf6c3c3c3, 0xf3c3c3c3, 0xf0c4c4c4, 0xeac5c5c5, 0xe3c7c7c7,
+ 0xdbc9c9c9, 0xcfcccccc, 0xc2cfcfcf, 0xb3d3d3d3, 0xa1d7d7d7,
+ 0x8edcdcdc, 0x7be1e1e1, 0x67e5e5e5, 0x55eaeaea, 0x44eeeeee,
+ 0x34f2f2f2, 0x32f3f3f3, 0x41efefef, 0x51ebebeb, 0x63e7e7e7,
+ 0x76e2e2e2, 0x89dddddd, 0x9bd8d8d8, 0xadd4d4d4, 0xbcd1d1d1,
+ 0xcacdcdcd, 0xd5cacaca, 0xdec8c8c8, 0xe6c6c6c6, 0xebc5c5c5,
+ 0xf0c4c4c4, 0xf3c3c3c3, 0xf5c2c2c2, 0xf6c2c2c2, 0xf7c2c2c2,
+ 0xf7c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2,
+ 0xf8c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2,
+ 0xf8c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2,
+ 0xf8c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2, 0xf8c2c2c2,
+ 0xf8c2c2c2, 0xf7c2c2c2, 0xf7c2c2c2, 0xf6c2c2c2, 0xf5c2c2c2,
+ 0xf3c3c3c3, 0xf0c4c4c4, 0xebc5c5c5, 0xe6c6c6c6, 0xdec8c8c8,
+ 0xd5cacaca, 0xcacdcdcd, 0xbcd1d1d1, 0xadd4d4d4, 0x9bd8d8d8,
+ 0x89dddddd, 0x76e2e2e2, 0x63e7e7e7, 0x51ebebeb, 0x41efefef,
+ 0x32f3f3f3, 0x2ef4f4f4, 0x3df0f0f0, 0x4cececec, 0x5ee8e8e8,
+ 0x70e3e3e3, 0x83dfdfdf, 0x94dadada, 0xa6d6d6d6, 0xb5d2d2d2,
+ 0xc3cfcfcf, 0xcfcccccc, 0xd8c9c9c9, 0xe0c8c8c8, 0xe6c6c6c6,
+ 0xeac5c5c5, 0xeec5c5c5, 0xf0c4c4c4, 0xf1c3c3c3, 0xf3c3c3c3,
+ 0xf3c3c3c3, 0xf3c3c3c3, 0xf4c3c3c3, 0xf4c3c3c3, 0xf4c3c3c3,
+ 0xf4c3c3c3, 0xf4c3c3c3, 0xf4c3c3c3, 0xf4c3c3c3, 0xf4c3c3c3,
+ 0xf4c3c3c3, 0xf4c3c3c3, 0xf4c3c3c3, 0xf4c3c3c3, 0xf4c3c3c3,
+ 0xf4c3c3c3, 0xf4c3c3c3, 0xf4c3c3c3, 0xf4c3c3c3, 0xf4c3c3c3,
+ 0xf3c3c3c3, 0xf3c3c3c3, 0xf3c3c3c3, 0xf1c3c3c3, 0xf0c4c4c4,
+ 0xeec5c5c5, 0xeac5c5c5, 0xe6c6c6c6, 0xe0c8c8c8, 0xd8c9c9c9,
+ 0xcfcccccc, 0xc3cfcfcf, 0xb5d2d2d2, 0xa6d6d6d6, 0x94dadada,
+ 0x83dfdfdf, 0x70e3e3e3, 0x5ee8e8e8, 0x4cececec, 0x3df0f0f0,
+ 0x2ef4f4f4, 0x2bf4f4f4, 0x38f1f1f1, 0x47eeeeee, 0x57e9e9e9,
+ 0x69e5e5e5, 0x7be1e1e1, 0x8cdcdcdc, 0x9dd8d8d8, 0xadd4d4d4,
+ 0xbbd1d1d1, 0xc7cecece, 0xd0cbcbcb, 0xd8cacaca, 0xdfc8c8c8,
+ 0xe3c7c7c7, 0xe7c6c6c6, 0xeac5c5c5, 0xebc5c5c5, 0xedc5c5c5,
+ 0xedc4c4c4, 0xeec4c4c4, 0xeec4c4c4, 0xeec4c4c4, 0xeec4c4c4,
+ 0xeec4c4c4, 0xeec4c4c4, 0xeec4c4c4, 0xeec4c4c4, 0xeec4c4c4,
+ 0xeec4c4c4, 0xeec4c4c4, 0xeec4c4c4, 0xeec4c4c4, 0xeec4c4c4,
+ 0xeec4c4c4, 0xeec4c4c4, 0xeec4c4c4, 0xeec4c4c4, 0xeec4c4c4,
+ 0xeec4c4c4, 0xedc4c4c4, 0xedc5c5c5, 0xebc5c5c5, 0xeac5c5c5,
+ 0xe7c6c6c6, 0xe3c7c7c7, 0xdfc8c8c8, 0xd8cacaca, 0xd0cbcbcb,
+ 0xc7cecece, 0xbbd1d1d1, 0xadd4d4d4, 0x9dd8d8d8, 0x8cdcdcdc,
+ 0x7be1e1e1, 0x69e5e5e5, 0x57e9e9e9, 0x47eeeeee, 0x38f1f1f1,
+ 0x2bf4f4f4, 0x27f5f5f5, 0x33f2f2f2, 0x41efefef, 0x50ebebeb,
+ 0x61e7e7e7, 0x72e3e3e3, 0x83dedede, 0x94dadada, 0xa3d7d7d7,
+ 0xb0d3d3d3, 0xbcd0d0d0, 0xc6cecece, 0xcfcccccc, 0xd5cacaca,
+ 0xdac9c9c9, 0xdec8c8c8, 0xe1c7c7c7, 0xe3c7c7c7, 0xe4c7c7c7,
+ 0xe5c6c6c6, 0xe6c6c6c6, 0xe6c6c6c6, 0xe6c6c6c6, 0xe6c6c6c6,
+ 0xe7c6c6c6, 0xe7c6c6c6, 0xe7c6c6c6, 0xe7c6c6c6, 0xe7c6c6c6,
+ 0xe7c6c6c6, 0xe7c6c6c6, 0xe7c6c6c6, 0xe7c6c6c6, 0xe7c6c6c6,
+ 0xe7c6c6c6, 0xe7c6c6c6, 0xe6c6c6c6, 0xe6c6c6c6, 0xe6c6c6c6,
+ 0xe6c6c6c6, 0xe5c6c6c6, 0xe4c7c7c7, 0xe3c7c7c7, 0xe1c7c7c7,
+ 0xdec8c8c8, 0xdac9c9c9, 0xd5cacaca, 0xcfcccccc, 0xc6cecece,
+ 0xbcd0d0d0, 0xb0d3d3d3, 0xa3d7d7d7, 0x94dadada, 0x83dedede,
+ 0x72e3e3e3, 0x61e7e7e7, 0x50ebebeb, 0x41efefef, 0x33f2f2f2,
+ 0x27f5f5f5, 0x23f6f6f6, 0x2ef4f4f4, 0x3bf1f1f1, 0x49ededed,
+ 0x58e9e9e9, 0x68e5e5e5, 0x78e1e1e1, 0x88dddddd, 0x97dadada,
+ 0xa5d6d6d6, 0xb0d3d3d3, 0xbbd1d1d1, 0xc3cfcfcf, 0xcacdcdcd,
+ 0xcfcccccc, 0xd3cbcbcb, 0xd7cacaca, 0xd9c9c9c9, 0xdac9c9c9,
+ 0xdbc9c9c9, 0xdcc9c9c9, 0xdcc9c9c9, 0xdcc9c9c9, 0xddc9c9c9,
+ 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8,
+ 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8,
+ 0xddc8c8c8, 0xddc8c8c8, 0xddc9c9c9, 0xdcc9c9c9, 0xdcc9c9c9,
+ 0xdcc9c9c9, 0xdbc9c9c9, 0xdac9c9c9, 0xd9c9c9c9, 0xd7cacaca,
+ 0xd3cbcbcb, 0xcfcccccc, 0xcacdcdcd, 0xc3cfcfcf, 0xbbd1d1d1,
+ 0xb0d3d3d3, 0xa5d6d6d6, 0x97dadada, 0x88dddddd, 0x78e1e1e1,
+ 0x68e5e5e5, 0x58e9e9e9, 0x49ededed, 0x3bf1f1f1, 0x2ef4f4f4,
+ 0x23f6f6f6, 0x1ef7f7f7, 0x28f5f5f5, 0x34f2f2f2, 0x41efefef,
+ 0x4fececec, 0x5ee8e8e8, 0x6de4e4e4, 0x7ce0e0e0, 0x8adddddd,
+ 0x97dadada, 0xa3d7d7d7, 0xadd4d4d4, 0xb5d2d2d2, 0xbcd1d1d1,
+ 0xc2cfcfcf, 0xc6cecece, 0xc9cdcdcd, 0xcccdcdcd, 0xcdcccccc,
+ 0xcecccccc, 0xcfcccccc, 0xd0cccccc, 0xd0cccccc, 0xd0cccccc,
+ 0xd0cccccc, 0xd0cccccc, 0xd0cccccc, 0xd0cccccc, 0xd0cccccc,
+ 0xd0cccccc, 0xd0cccccc, 0xd0cccccc, 0xd0cccccc, 0xd0cccccc,
+ 0xd0cccccc, 0xd0cccccc, 0xd0cccccc, 0xd0cccccc, 0xd0cccccc,
+ 0xcfcccccc, 0xcecccccc, 0xcdcccccc, 0xcccdcdcd, 0xc9cdcdcd,
+ 0xc6cecece, 0xc2cfcfcf, 0xbcd1d1d1, 0xb5d2d2d2, 0xadd4d4d4,
+ 0xa3d7d7d7, 0x97dadada, 0x8adddddd, 0x7ce0e0e0, 0x6de4e4e4,
+ 0x5ee8e8e8, 0x4fececec, 0x41efefef, 0x34f2f2f2, 0x28f5f5f5,
+ 0x1ef7f7f7, 0x1af9f9f9, 0x23f6f6f6, 0x2df4f4f4, 0x39f1f1f1,
+ 0x45eeeeee, 0x53ebebeb, 0x61e7e7e7, 0x6fe4e4e4, 0x7ce0e0e0,
+ 0x88dddddd, 0x93dbdbdb, 0x9dd8d8d8, 0xa6d6d6d6, 0xadd4d4d4,
+ 0xb2d3d3d3, 0xb7d2d2d2, 0xbad1d1d1, 0xbdd0d0d0, 0xbed0d0d0,
+ 0xbfd0d0d0, 0xc0cfcfcf, 0xc1cfcfcf, 0xc1cfcfcf, 0xc1cfcfcf,
+ 0xc1cfcfcf, 0xc1cfcfcf, 0xc2cfcfcf, 0xc2cfcfcf, 0xc2cfcfcf,
+ 0xc2cfcfcf, 0xc2cfcfcf, 0xc2cfcfcf, 0xc2cfcfcf, 0xc2cfcfcf,
+ 0xc1cfcfcf, 0xc1cfcfcf, 0xc1cfcfcf, 0xc1cfcfcf, 0xc1cfcfcf,
+ 0xc0cfcfcf, 0xbfd0d0d0, 0xbed0d0d0, 0xbdd0d0d0, 0xbad1d1d1,
+ 0xb7d2d2d2, 0xb2d3d3d3, 0xadd4d4d4, 0xa6d6d6d6, 0x9dd8d8d8,
+ 0x93dbdbdb, 0x88dddddd, 0x7ce0e0e0, 0x6fe4e4e4, 0x61e7e7e7,
+ 0x53ebebeb, 0x45eeeeee, 0x39f1f1f1, 0x2df4f4f4, 0x23f6f6f6,
+ 0x1af9f9f9, 0x16fafafa, 0x1df8f8f8, 0x26f6f6f6, 0x30f3f3f3,
+ 0x3cf0f0f0, 0x48ededed, 0x54eaeaea, 0x61e7e7e7, 0x6de4e4e4,
+ 0x79e1e1e1, 0x83dfdfdf, 0x8ddcdcdc, 0x95dadada, 0x9bd9d9d9,
+ 0xa1d7d7d7, 0xa5d6d6d6, 0xa9d5d5d5, 0xabd5d5d5, 0xadd4d4d4,
+ 0xaed4d4d4, 0xafd4d4d4, 0xb0d4d4d4, 0xb0d3d3d3, 0xb0d3d3d3,
+ 0xb0d3d3d3, 0xb0d3d3d3, 0xb0d3d3d3, 0xb0d3d3d3, 0xb0d3d3d3,
+ 0xb0d3d3d3, 0xb0d3d3d3, 0xb0d3d3d3, 0xb0d3d3d3, 0xb0d3d3d3,
+ 0xb0d3d3d3, 0xb0d3d3d3, 0xb0d3d3d3, 0xb0d3d3d3, 0xb0d4d4d4,
+ 0xafd4d4d4, 0xaed4d4d4, 0xadd4d4d4, 0xabd5d5d5, 0xa9d5d5d5,
+ 0xa5d6d6d6, 0xa1d7d7d7, 0x9bd9d9d9, 0x95dadada, 0x8ddcdcdc,
+ 0x83dfdfdf, 0x79e1e1e1, 0x6de4e4e4, 0x61e7e7e7, 0x54eaeaea,
+ 0x48ededed, 0x3cf0f0f0, 0x30f3f3f3, 0x26f6f6f6, 0x1df8f8f8,
+ 0x16fafafa, 0x12fbfbfb, 0x18f9f9f9, 0x20f7f7f7, 0x28f5f5f5,
+ 0x32f3f3f3, 0x3df0f0f0, 0x48ededed, 0x53eaeaea, 0x5ee8e8e8,
+ 0x68e5e5e5, 0x72e3e3e3, 0x7be1e1e1, 0x82dfdfdf, 0x89dddddd,
+ 0x8edcdcdc, 0x93dbdbdb, 0x96dadada, 0x98d9d9d9, 0x9ad9d9d9,
+ 0x9bd9d9d9, 0x9cd8d8d8, 0x9dd8d8d8, 0x9dd8d8d8, 0x9dd8d8d8,
+ 0x9ed8d8d8, 0x9ed8d8d8, 0x9ed8d8d8, 0x9ed8d8d8, 0x9ed8d8d8,
+ 0x9ed8d8d8, 0x9ed8d8d8, 0x9ed8d8d8, 0x9ed8d8d8, 0x9ed8d8d8,
+ 0x9ed8d8d8, 0x9ed8d8d8, 0x9dd8d8d8, 0x9dd8d8d8, 0x9dd8d8d8,
+ 0x9cd8d8d8, 0x9bd9d9d9, 0x9ad9d9d9, 0x98d9d9d9, 0x96dadada,
+ 0x93dbdbdb, 0x8edcdcdc, 0x89dddddd, 0x82dfdfdf, 0x7be1e1e1,
+ 0x72e3e3e3, 0x68e5e5e5, 0x5ee8e8e8, 0x53eaeaea, 0x48ededed,
+ 0x3df0f0f0, 0x32f3f3f3, 0x28f5f5f5, 0x20f7f7f7, 0x18f9f9f9,
+ 0x12fbfbfb, 0x0efbfbfb, 0x14fafafa, 0x1af9f9f9, 0x21f7f7f7,
+ 0x29f5f5f5, 0x32f3f3f3, 0x3cf0f0f0, 0x45eeeeee, 0x4febebeb,
+ 0x58e9e9e9, 0x61e7e7e7, 0x69e5e5e5, 0x70e3e3e3, 0x76e2e2e2,
+ 0x7be1e1e1, 0x7fe0e0e0, 0x82dfdfdf, 0x85dedede, 0x86dedede,
+ 0x87dedede, 0x88dddddd, 0x89dddddd, 0x89dddddd, 0x89dddddd,
+ 0x8adddddd, 0x8adddddd, 0x8adddddd, 0x8adddddd, 0x8adddddd,
+ 0x8adddddd, 0x8adddddd, 0x8adddddd, 0x8adddddd, 0x8adddddd,
+ 0x8adddddd, 0x8adddddd, 0x89dddddd, 0x89dddddd, 0x89dddddd,
+ 0x88dddddd, 0x87dedede, 0x86dedede, 0x85dedede, 0x82dfdfdf,
+ 0x7fe0e0e0, 0x7be1e1e1, 0x76e2e2e2, 0x70e3e3e3, 0x69e5e5e5,
+ 0x61e7e7e7, 0x58e9e9e9, 0x4febebeb, 0x45eeeeee, 0x3cf0f0f0,
+ 0x32f3f3f3, 0x29f5f5f5, 0x21f7f7f7, 0x1af9f9f9, 0x14fafafa,
+ 0x0efbfbfb, 0x0bfcfcfc, 0x0ffbfbfb, 0x14fafafa, 0x1af8f8f8,
+ 0x21f7f7f7, 0x29f5f5f5, 0x30f3f3f3, 0x39f1f1f1, 0x41efefef,
+ 0x49ededed, 0x51ebebeb, 0x58e9e9e9, 0x5ee8e8e8, 0x63e6e6e6,
+ 0x68e5e5e5, 0x6be4e4e4, 0x6ee4e4e4, 0x70e3e3e3, 0x72e3e3e3,
+ 0x73e3e3e3, 0x74e2e2e2, 0x75e2e2e2, 0x75e2e2e2, 0x75e2e2e2,
+ 0x75e2e2e2, 0x75e2e2e2, 0x75e2e2e2, 0x75e2e2e2, 0x75e2e2e2,
+ 0x75e2e2e2, 0x75e2e2e2, 0x75e2e2e2, 0x75e2e2e2, 0x75e2e2e2,
+ 0x75e2e2e2, 0x75e2e2e2, 0x75e2e2e2, 0x75e2e2e2, 0x75e2e2e2,
+ 0x74e2e2e2, 0x73e3e3e3, 0x72e3e3e3, 0x70e3e3e3, 0x6ee4e4e4,
+ 0x6be4e4e4, 0x68e5e5e5, 0x63e6e6e6, 0x5ee8e8e8, 0x58e9e9e9,
+ 0x51ebebeb, 0x49ededed, 0x41efefef, 0x39f1f1f1, 0x30f3f3f3,
+ 0x29f5f5f5, 0x21f7f7f7, 0x1af8f8f8, 0x14fafafa, 0x0ffbfbfb,
+ 0x0bfcfcfc, 0x09fdfdfd, 0x0cfcfcfc, 0x10fbfbfb, 0x14fafafa,
+ 0x1af9f9f9, 0x20f7f7f7, 0x26f6f6f6, 0x2df4f4f4, 0x34f2f2f2,
+ 0x3bf0f0f0, 0x41efefef, 0x47ededed, 0x4cececec, 0x51ebebeb,
+ 0x55eaeaea, 0x58e9e9e9, 0x5be9e9e9, 0x5de8e8e8, 0x5ee8e8e8,
+ 0x5fe7e7e7, 0x60e7e7e7, 0x61e7e7e7, 0x61e7e7e7, 0x61e7e7e7,
+ 0x61e7e7e7, 0x61e7e7e7, 0x61e7e7e7, 0x61e7e7e7, 0x61e7e7e7,
+ 0x61e7e7e7, 0x61e7e7e7, 0x61e7e7e7, 0x61e7e7e7, 0x61e7e7e7,
+ 0x61e7e7e7, 0x61e7e7e7, 0x61e7e7e7, 0x61e7e7e7, 0x61e7e7e7,
+ 0x60e7e7e7, 0x5fe7e7e7, 0x5ee8e8e8, 0x5de8e8e8, 0x5be9e9e9,
+ 0x58e9e9e9, 0x55eaeaea, 0x51ebebeb, 0x4cececec, 0x47ededed,
+ 0x41efefef, 0x3bf0f0f0, 0x34f2f2f2, 0x2df4f4f4, 0x26f6f6f6,
+ 0x20f7f7f7, 0x1af9f9f9, 0x14fafafa, 0x10fbfbfb, 0x0cfcfcfc,
+ 0x09fdfdfd, 0x06fdfdfd, 0x09fdfdfd, 0x0cfcfcfc, 0x0ffbfbfb,
+ 0x14fafafa, 0x18f9f9f9, 0x1df8f8f8, 0x23f6f6f6, 0x28f5f5f5,
+ 0x2ef4f4f4, 0x33f2f2f2, 0x38f1f1f1, 0x3df0f0f0, 0x41efefef,
+ 0x44eeeeee, 0x47eeeeee, 0x49ededed, 0x4bededed, 0x4cececec,
+ 0x4dececec, 0x4dececec, 0x4eececec, 0x4eececec, 0x4eececec,
+ 0x4eececec, 0x4eececec, 0x4fececec, 0x4fececec, 0x4fececec,
+ 0x4fececec, 0x4fececec, 0x4fececec, 0x4fececec, 0x4fececec,
+ 0x4eececec, 0x4eececec, 0x4eececec, 0x4eececec, 0x4eececec,
+ 0x4dececec, 0x4dececec, 0x4cececec, 0x4bededed, 0x49ededed,
+ 0x47eeeeee, 0x44eeeeee, 0x41efefef, 0x3df0f0f0, 0x38f1f1f1,
+ 0x33f2f2f2, 0x2ef4f4f4, 0x28f5f5f5, 0x23f6f6f6, 0x1df8f8f8,
+ 0x18f9f9f9, 0x14fafafa, 0x0ffbfbfb, 0x0cfcfcfc, 0x09fdfdfd,
+ 0x06fdfdfd, };
+
+ Image shadowImage;
+
+ public ShadowComposite(Composite parent, int style) {
+ super(parent, style);
+ addPaintListener(new PaintListener() {
+
+ public void paintControl(PaintEvent e) {
+ Point size = getSize();
+ Rectangle bodyRect = new Rectangle(0, 0, size.x, size.y);
+ drawTabBody(e.gc, bodyRect, 0);
+ drawTabHeader(e.gc, bodyRect, 0);
+ }
+ });
+ }
+
+ @Override
+ public Rectangle getClientArea() {
+ Rectangle area = super.getClientArea();
+ return new Rectangle(15, 15, area.width - 30, area.height - 30);
+ }
+
+
+
+ void drawTabHeader(GC gc, Rectangle bounds, int state) {
+ // gc.setClipping(bounds.x, bounds.y, bounds.width,
+ // parent.getTabHeight() + 1);
+
+ int[] points = new int[1024];
+ int index = 0;
+ int radius = CORNER_SIZE / 2;
+// int marginWidth = parent.marginWidth;
+// int marginHeight = parent.marginHeight;
+ int delta = INNER_KEYLINE + OUTER_KEYLINE + 2 * SIDE_DROP_WIDTH + 2
+ * marginWidth;
+ int width = bounds.width - delta;
+ int height = bounds.height - INNER_KEYLINE - OUTER_KEYLINE - 2
+ * marginHeight - BOTTOM_DROP_WIDTH;
+ int circX = bounds.x + delta / 2 + radius;
+ int circY = bounds.y + radius;
+
+ // Fill in background
+ Region clipping = new Region();
+ gc.getClipping(clipping);
+ Region region = new Region();
+ region.add(shape);
+ region.intersect(clipping);
+ gc.setClipping(region);
+
+// int header = 3; // TODO: this needs to be added to computeTrim for
+// // HEADER
+// Rectangle trim = computeTrim(PART_HEADER, state, 0, 0, 0, 0);
+// trim.width = bounds.width - trim.width;
+// trim.height = (parent.getTabHeight() + 1 + header) - trim.height;
+// trim.x = -trim.x;
+// trim.y = -trim.y;
+//
+// draw(PART_BACKGROUND, SWT.NONE, trim, gc);
+
+ gc.setClipping(clipping);
+ clipping.dispose();
+ region.dispose();
+
+ int[] ltt = drawCircle(circX + 1, circY + 1, radius, LEFT_TOP);
+ System.arraycopy(ltt, 0, points, index, ltt.length);
+ index += ltt.length;
+
+ int[] lbb = drawCircle(circX + 1, circY + height - (radius * 2) - 2,
+ radius, LEFT_BOTTOM);
+ System.arraycopy(lbb, 0, points, index, lbb.length);
+ index += lbb.length;
+
+ int[] rb = drawCircle(circX + width - (radius * 2) - 2, circY + height
+ - (radius * 2) - 2, radius, RIGHT_BOTTOM);
+ System.arraycopy(rb, 0, points, index, rb.length);
+ index += rb.length;
+
+ int[] rt = drawCircle(circX + width - (radius * 2) - 2, circY + 1,
+ radius, RIGHT_TOP);
+ System.arraycopy(rt, 0, points, index, rt.length);
+ index += rt.length;
+ points[index++] = points[0];
+ points[index++] = points[1];
+
+ int[] tempPoints = new int[index];
+ System.arraycopy(points, 0, tempPoints, 0, index);
+
+ // White Keyline
+ // gc.setAntialias(SWT.ON);
+ gc.setForeground(gc.getDevice().getSystemColor(SWT.COLOR_WHITE));
+ gc.drawPolyline(tempPoints);
+
+ ltt = drawCircle(circX + 2, circY + 2, radius, LEFT_TOP);
+ System.arraycopy(ltt, 0, points, index, ltt.length);
+ gc.drawPolyline(ltt);
+
+ rt = drawCircle(circX + width - (radius * 2) - 3, circY + 2, radius,
+ RIGHT_TOP);
+ System.arraycopy(rt, 0, points, index, rt.length);
+ gc.drawPolyline(rt);
+
+ int rtLength = rt.length;
+ gc.drawLine(rt[rtLength - 2], rt[rtLength - 1], ltt[0], ltt[1]);
+
+ Color borderBlue = new Color(gc.getDevice(), 190, 216, 237);
+ gc.setForeground(borderBlue);
+ gc.drawPolyline(shape);
+ borderBlue.dispose();
+ }
+
+ void drawTabBody(GC gc, Rectangle bounds, int state) {
+ int[] points = new int[1024];
+ int index = 0;
+ int radius = CORNER_SIZE / 2;
+// int marginWidth = parent.marginWidth;
+// int marginHeight = parent.marginHeight;
+ int delta = INNER_KEYLINE + OUTER_KEYLINE + 2 * SIDE_DROP_WIDTH + 2
+ * marginWidth;
+ int width = bounds.width - delta;
+ int height = bounds.height - INNER_KEYLINE - OUTER_KEYLINE - 2
+ * marginHeight - BOTTOM_DROP_WIDTH;
+
+ int circX = bounds.x + delta / 2 + radius;
+ int circY = bounds.y + radius;
+
+ // Body
+ index = 0;
+ int[] ltt = drawCircle(circX, circY, radius, LEFT_TOP);
+ System.arraycopy(ltt, 0, points, index, ltt.length);
+ index += ltt.length;
+
+ int[] lbb = drawCircle(circX, circY + height - (radius * 2), radius,
+ LEFT_BOTTOM);
+ System.arraycopy(lbb, 0, points, index, lbb.length);
+ index += lbb.length;
+
+ int[] rb = drawCircle(circX + width - (radius * 2), circY + height
+ - (radius * 2), radius, RIGHT_BOTTOM);
+ System.arraycopy(rb, 0, points, index, rb.length);
+ index += rb.length;
+
+ int[] rt = drawCircle(circX + width - (radius * 2), circY, radius,
+ RIGHT_TOP);
+ System.arraycopy(rt, 0, points, index, rt.length);
+ index += rt.length;
+ points[index++] = circX;
+ points[index++] = circY - radius;
+
+ int[] tempPoints = new int[index];
+ System.arraycopy(points, 0, tempPoints, 0, index);
+ shape = tempPoints;
+ gc.fillPolygon(shape);
+
+ // Fill in parent background for non-rectangular shape
+ Region r = new Region();
+ r.add(bounds);
+ r.subtract(shape);
+ gc.setBackground(getParent().getBackground());
+ Display display = getDisplay();
+ Region clipping = new Region();
+ gc.getClipping(clipping);
+ r.intersect(clipping);
+ gc.setClipping(r);
+ Rectangle mappedBounds = display
+ .map(this, getParent(), bounds);
+ getParent().drawBackground(gc, bounds.x, bounds.y, bounds.width,
+ bounds.height, mappedBounds.x, mappedBounds.y);
+
+ // Shadow
+ drawShadow(display, bounds, gc);
+
+ gc.setClipping(clipping);
+ clipping.dispose();
+ r.dispose();
+ }
+
+ static int[] drawCircle(int xC, int yC, int r, int circlePart) {
+ int x = 0, y = r, u = 1, v = 2 * r - 1, e = 0;
+ int[] points = new int[1024];
+ int[] pointsMirror = new int[1024];
+ int loop = 0;
+ int loopMirror = 0;
+ while (x < y) {
+ if (circlePart == RIGHT_BOTTOM) {
+ points[loop++] = xC + x;
+ points[loop++] = yC + y;
+ }
+ if (circlePart == RIGHT_TOP) {
+ points[loop++] = xC + y;
+ points[loop++] = yC - x;
+ }
+ if (circlePart == LEFT_TOP) {
+ points[loop++] = xC - x;
+ points[loop++] = yC - y;
+ }
+ if (circlePart == LEFT_BOTTOM) {
+ points[loop++] = xC - y;
+ points[loop++] = yC + x;
+ }
+ x++;
+ e += u;
+ u += 2;
+ if (v < 2 * e) {
+ y--;
+ e -= v;
+ v -= 2;
+ }
+ if (x > y)
+ break;
+ if (circlePart == RIGHT_BOTTOM) {
+ pointsMirror[loopMirror++] = xC + y;
+ pointsMirror[loopMirror++] = yC + x;
+ }
+ if (circlePart == RIGHT_TOP) {
+ pointsMirror[loopMirror++] = xC + x;
+ pointsMirror[loopMirror++] = yC - y;
+ }
+ if (circlePart == LEFT_TOP) {
+ pointsMirror[loopMirror++] = xC - y;
+ pointsMirror[loopMirror++] = yC - x;
+ }
+ if (circlePart == LEFT_BOTTOM) {
+ pointsMirror[loopMirror++] = xC - x;
+ pointsMirror[loopMirror++] = yC + y;
+ }
+ // grow?
+ if ((loop + 1) > points.length) {
+ int length = points.length * 2;
+ int[] newPointTable = new int[length];
+ int[] newPointTableMirror = new int[length];
+ System.arraycopy(points, 0, newPointTable, 0, points.length);
+ points = newPointTable;
+ System.arraycopy(pointsMirror, 0, newPointTableMirror, 0,
+ pointsMirror.length);
+ pointsMirror = newPointTableMirror;
+ }
+ }
+ int[] finalArray = new int[loop + loopMirror];
+ System.arraycopy(points, 0, finalArray, 0, loop);
+ for (int i = loopMirror - 1, j = loop; i > 0; i = i - 2, j = j + 2) {
+ int tempY = pointsMirror[i];
+ int tempX = pointsMirror[i - 1];
+ finalArray[j] = tempX;
+ finalArray[j + 1] = tempY;
+ }
+ return finalArray;
+ }
+
+ void drawShadow(final Display display, Rectangle bounds, GC gc) {
+ if (shadowImage == null)
+ createShadow(display);
+ int x = bounds.x;
+ int y = bounds.y;
+ int SIZE = shadowImage.getBounds().width / 3;
+ // top left
+ gc.drawImage(shadowImage, 0, 0, SIZE, SIZE, 0, 0, SIZE, 20);
+ int fillHeight = bounds.height - SIZE * 2;
+ int fillWidth = bounds.width + 5 - SIZE * 2;
+
+ int xFill = 0;
+ for (int i = SIZE; i < fillHeight; i += SIZE) {
+ xFill = i;
+ gc.drawImage(shadowImage, 0, SIZE, SIZE, SIZE, 0, i, SIZE, SIZE);
+ }
+
+ // Pad the rest of the shadow
+ gc.drawImage(shadowImage, 0, SIZE, SIZE, fillHeight - xFill, 0, xFill
+ + SIZE, SIZE, fillHeight - xFill);
+
+ // bl
+ gc.drawImage(shadowImage, 0, 40, 20, 20, 0, y + bounds.height - SIZE,
+ 20, 20);
+ int yFill = 0;
+ for (int i = SIZE; i <= fillWidth; i += SIZE) {
+ yFill = i;
+ gc.drawImage(shadowImage, SIZE, SIZE * 2, SIZE, SIZE, i, y
+ + bounds.height - SIZE, SIZE, SIZE);
+ }
+ // Pad the rest of the shadow
+ gc.drawImage(shadowImage, SIZE, SIZE * 2, fillWidth - yFill, SIZE,
+ yFill + SIZE, y + bounds.height - SIZE, fillWidth - yFill, SIZE);
+
+ // br
+ gc.drawImage(shadowImage, SIZE * 2, SIZE * 2, SIZE, SIZE, x
+ + bounds.width - SIZE + 5, y + bounds.height - SIZE, SIZE, SIZE);
+
+ // tr
+ gc.drawImage(shadowImage, SIZE * 2, 0, SIZE, SIZE, x + bounds.width
+ - SIZE + 5, y, SIZE, SIZE);
+
+ xFill = 0;
+ for (int i = SIZE; i < fillHeight; i += SIZE) {
+ xFill = i;
+ gc.drawImage(shadowImage, SIZE * 2, SIZE, SIZE, SIZE, x
+ + bounds.width - SIZE + 5, i, SIZE, SIZE);
+ }
+
+ // Pad the rest of the shadow
+ gc.drawImage(shadowImage, SIZE * 2, SIZE, SIZE, fillHeight - xFill, x
+ + bounds.width - SIZE + 5, xFill + SIZE, SIZE, fillHeight
+ - xFill);
+ }
+
+ void createShadow(final Display display) {
+ Object obj = display.getData(E4_SHADOW_IMAGE);
+ if (obj != null) {
+ shadowImage = (Image) obj;
+ } else {
+ ImageData data = new ImageData(60, 60, 32, new PaletteData(
+ 0xFF0000, 0xFF00, 0xFF));
+ for (int y = 0, index = 0; y < 60; y++) {
+ for (int x = 0; x < 60; x++) {
+ data.setPixel(x, y, shadow[index] & 0xFFFFFF);
+ data.setAlpha(x, y, (shadow[index] >> 24) & 0xFF);
+ index++;
+ }
+ }
+ shadowImage = new Image(display, data);
+ display.setData(E4_SHADOW_IMAGE, shadowImage);
+ display.disposeExec(new Runnable() {
+ public void run() {
+ Object obj = display.getData(E4_SHADOW_IMAGE);
+ if (obj != null) {
+ Image tmp = (Image) obj;
+ tmp.dispose();
+ display.setData(E4_SHADOW_IMAGE, null);
+ }
+ }
+ });
+ }
+ }
+}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ComponentLabelProvider.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ComponentLabelProvider.java
new file mode 100644
index 00000000..2030f986
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ComponentLabelProvider.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * Copyright (c) 2010 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.e4.tools.emf.ui.internal.common;
+
+import org.eclipse.e4.ui.model.application.MModelComponent;
+import org.eclipse.e4.ui.model.application.MModelComponents;
+import org.eclipse.e4.ui.model.application.MPart;
+import org.eclipse.e4.ui.model.application.MPartDescriptor;
+import org.eclipse.jface.viewers.StyledCellLabelProvider;
+import org.eclipse.jface.viewers.StyledString;
+import org.eclipse.jface.viewers.ViewerCell;
+import org.eclipse.jface.viewers.StyledString.Styler;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.TextStyle;
+
+public class ComponentLabelProvider extends StyledCellLabelProvider {
+ private Image modelComponentsImage;
+ private Image modelComonentImage;
+ private Image partsImage;
+ private Image menusImage;
+ private Image partImage;
+ private Image partDescriptorImage;
+
+ @Override
+ public void update(final ViewerCell cell) {
+ if( cell.getElement() instanceof MModelComponents ) {
+ cell.setText("Model Components");
+ if( modelComponentsImage == null ) {
+ modelComponentsImage = new Image(cell.getControl().getDisplay(), getClass().getClassLoader().getResourceAsStream("/icons/application_view_icons.png"));
+ }
+ cell.setImage(modelComponentsImage);
+ } else if( cell.getElement() instanceof MModelComponent ) {
+ MModelComponent m = (MModelComponent) cell.getElement();
+ StyledString styledString = new StyledString("Model Component", null);
+ String decoration = " - " + m.getParentID();
+ Styler styler = new Styler() {
+
+ @Override
+ public void applyStyles(TextStyle textStyle) {
+ textStyle.foreground = cell.getControl().getDisplay().getSystemColor(SWT.COLOR_GRAY);
+ }
+ };
+
+ styledString.append(decoration, styler);
+ cell.setText(styledString.getString());
+ cell.setStyleRanges(styledString.getStyleRanges());
+ if( modelComonentImage == null ) {
+ modelComonentImage = new Image(cell.getControl().getDisplay(), getClass().getClassLoader().getResourceAsStream("/icons/package_go.png"));
+ }
+ cell.setImage(modelComonentImage);
+ } else if( cell.getElement() instanceof VirtualEntry<?> ) {
+ String s = cell.getElement().toString();
+ cell.setText(s);
+ if( "Parts".equals(s) ) {
+ if( partsImage == null ) {
+ partsImage = new Image(cell.getControl().getDisplay(), getClass().getClassLoader().getResourceAsStream("/icons/application_double.png"));
+ }
+ cell.setImage(partsImage);
+ } else if( "Menus".equals(s) ) {
+ if( menusImage == null ) {
+ menusImage = new Image(cell.getControl().getDisplay(), getClass().getClassLoader().getResourceAsStream("/icons/cog.png"));
+ }
+ cell.setImage(menusImage);
+ }
+ } else if( cell.getElement() instanceof MPart ) {
+ MPart part = (MPart) cell.getElement();
+ String label;
+ if( cell.getElement() instanceof MPartDescriptor ) {
+ label = "Part Descriptor";
+ if( partDescriptorImage == null ) {
+ partDescriptorImage = new Image(cell.getControl().getDisplay(), getClass().getClassLoader().getResourceAsStream("/icons/application_form_edit.png"));
+ }
+ cell.setImage(partImage);
+ } else {
+ label = "Part";
+ if( partImage == null ) {
+ partImage = new Image(cell.getControl().getDisplay(), getClass().getClassLoader().getResourceAsStream("/icons/application_form.png"));
+ }
+ cell.setImage(partImage);
+ }
+ StyledString styledString = new StyledString(label, null);
+ String decoration = " - " + part.getLabel();
+ Styler styler = new Styler() {
+
+ @Override
+ public void applyStyles(TextStyle textStyle) {
+ textStyle.foreground = cell.getControl().getDisplay().getSystemColor(SWT.COLOR_GRAY);
+ }
+ };
+
+ styledString.append(decoration, styler);
+ cell.setText(styledString.getString());
+ cell.setStyleRanges(styledString.getStyleRanges());
+ } else {
+ cell.setText(cell.getElement()+"");
+ }
+ }
+
+ @Override
+ public void dispose() {
+ if( modelComponentsImage != null ) {
+ modelComponentsImage.dispose();
+ modelComponentsImage = null;
+ }
+
+ if( modelComonentImage != null ) {
+ modelComonentImage.dispose();
+ modelComonentImage = null;
+ }
+
+ if( partsImage != null ) {
+ partsImage.dispose();
+ partsImage = null;
+ }
+
+ if( menusImage != null ) {
+ menusImage.dispose();
+ menusImage = null;
+ }
+
+ if( partImage != null ) {
+ partImage.dispose();
+ partImage = null;
+ }
+
+ if( partDescriptorImage != null ) {
+ partDescriptorImage.dispose();
+ partDescriptorImage = null;
+ }
+ super.dispose();
+ }
+}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java
new file mode 100644
index 00000000..dee48397
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java
@@ -0,0 +1,233 @@
+/*******************************************************************************
+ * Copyright (c) 2010 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.e4.tools.emf.ui.internal.common;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.inject.Inject;
+
+import org.eclipse.core.databinding.observable.IObservable;
+import org.eclipse.core.databinding.observable.list.IObservableList;
+import org.eclipse.core.databinding.observable.list.WritableList;
+import org.eclipse.core.databinding.observable.masterdetail.IObservableFactory;
+import org.eclipse.core.databinding.property.list.IListProperty;
+import org.eclipse.e4.tools.emf.ui.common.IModelResource;
+import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.ShadowComposite;
+import org.eclipse.e4.tools.emf.ui.internal.common.component.ApplicationEditor;
+import org.eclipse.e4.tools.emf.ui.internal.common.component.ModelComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.common.component.ModelComponentsEditor;
+import org.eclipse.e4.tools.emf.ui.internal.common.component.PartDescriptorEditor;
+import org.eclipse.e4.tools.emf.ui.internal.common.component.PartEditor;
+import org.eclipse.e4.ui.model.application.MApplicationPackage;
+import org.eclipse.e4.ui.model.application.MModelComponent;
+import org.eclipse.e4.ui.model.application.MModelComponents;
+import org.eclipse.e4.ui.model.application.MPart;
+import org.eclipse.emf.databinding.EMFProperties;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.databinding.viewers.ObservableListTreeContentProvider;
+import org.eclipse.jface.databinding.viewers.TreeStructureAdvisor;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.custom.StackLayout;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+public class ModelEditor {
+ private static final int VIRTUAL_MENU = 1;
+ private static final int VIRTUAL_PART = 2;
+ private static final int VIRTUAL_HANDLER = 3;
+ private static final int VIRTUAL_BINDING = 4;
+
+ private Map<EClass, AbstractComponentEditor> editorMap = new HashMap<EClass, AbstractComponentEditor>();
+// private List<AbstractComponentEditor> editors = new ArrayList<AbstractComponentEditor>();
+
+ private TreeViewer viewer;
+ private IModelResource modelProvider;
+
+ @Inject
+ public ModelEditor(Composite composite, IModelResource modelProvider) {
+ this.modelProvider = modelProvider;
+ registerDefaultEditors();
+ SashForm form = new SashForm(composite, SWT.HORIZONTAL);
+ form.setBackground(form.getDisplay().getSystemColor(SWT.COLOR_WHITE));
+
+ viewer = createTreeViewerArea(form);
+
+ Composite parent = new Composite(form,SWT.NONE);
+ parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
+ FillLayout l = new FillLayout();
+ l.marginWidth=5;
+ parent.setLayout(l);
+
+ ShadowComposite editingArea = new ShadowComposite(parent,SWT.NONE);
+ GridLayout gl = new GridLayout();
+ gl.marginTop=0;
+ gl.marginHeight=0;
+ editingArea.setLayout(gl);
+ editingArea.setBackgroundMode(SWT.INHERIT_DEFAULT);
+ editingArea.setData("org.eclipse.e4.ui.css.CssClassName","contentContainer");
+
+ Composite headerContainer = new Composite(editingArea,SWT.NONE);
+ headerContainer.setBackgroundMode(SWT.INHERIT_DEFAULT);
+ headerContainer.setData("org.eclipse.e4.ui.css.CssClassName", "headerSectionContainer");
+ headerContainer.setLayout(new GridLayout(2, false));
+ headerContainer.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ final Label iconLabel = new Label(headerContainer,SWT.NONE);
+ iconLabel.setLayoutData(new GridData(20, 20));
+
+ final Label textLabel = new Label(headerContainer, SWT.NONE);
+ textLabel.setData("org.eclipse.e4.ui.css.CssClassName", "sectionHeader");
+ textLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ final Composite contentContainer = new Composite(editingArea,SWT.NONE);
+ contentContainer.setLayoutData(new GridData(GridData.FILL_BOTH));
+ final StackLayout layout = new StackLayout();
+ contentContainer.setLayout(layout);
+
+ viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+ public void selectionChanged(SelectionChangedEvent event) {
+ if( ! event.getSelection().isEmpty() ) {
+ IStructuredSelection s = (IStructuredSelection) event.getSelection();
+ if( s.getFirstElement() instanceof EObject ) {
+ EObject obj = (EObject) s.getFirstElement();
+ AbstractComponentEditor editor = editorMap.get(obj.eClass());
+ if( editor != null ) {
+ textLabel.setText(editor.getLabel());
+ iconLabel.setImage(editor.getImage(iconLabel.getDisplay()));
+ Composite comp = editor.getEditor(contentContainer, s.getFirstElement());
+ comp.setBackgroundMode(SWT.INHERIT_DEFAULT);
+ layout.topControl = comp;
+ contentContainer.layout(true);
+ }
+ }
+ }
+ }
+ });
+
+ form.setWeights(new int[] { 1 , 2 });
+ }
+
+ private TreeViewer createTreeViewerArea(Composite parent) {
+ parent = new Composite(parent,SWT.NONE);
+ parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
+ FillLayout l = new FillLayout();
+ l.marginWidth=5;
+ parent.setLayout(l);
+ ShadowComposite editingArea = new ShadowComposite(parent,SWT.NONE);
+ editingArea.setLayout(new FillLayout());
+ TreeViewer viewer = new TreeViewer(editingArea);
+ viewer.setLabelProvider(new ComponentLabelProvider());
+ ObservableListTreeContentProvider contentProvider = new ObservableListTreeContentProvider(
+ new ObservableFactoryImpl(), new TreeStructureAdvisorImpl());
+ viewer.setContentProvider(contentProvider);
+ viewer.setInput(modelProvider.getRoot());
+
+ return viewer;
+ }
+
+ private void registerDefaultEditors() {
+ registerEditor( MApplicationPackage.Literals.APPLICATION, new ApplicationEditor());
+ registerEditor( MApplicationPackage.Literals.MODEL_COMPONENTS, new ModelComponentsEditor());
+ registerEditor( MApplicationPackage.Literals.MODEL_COMPONENT, new ModelComponentEditor());
+ registerEditor( MApplicationPackage.Literals.PART, new PartEditor());
+ registerEditor( MApplicationPackage.Literals.PART_DESCRIPTOR, new PartDescriptorEditor());
+ }
+
+ public void registerEditor(EClass eClass, AbstractComponentEditor editor) {
+ editorMap.put(eClass, editor);
+ }
+
+ private static class TreeStructureAdvisorImpl extends TreeStructureAdvisor {
+
+ }
+
+ private static class ObservableFactoryImpl implements IObservableFactory {
+ private IListProperty MODEL_COMPONENTS__COMPONENTS = EMFProperties.list(MApplicationPackage.Literals.MODEL_COMPONENTS__COMPONENTS);
+ private IListProperty MODEL_COMPONENT__CHILDREN = EMFProperties.list(MApplicationPackage.Literals.MODEL_COMPONENT__CHILDREN);
+ private IListProperty PART__MENUS = EMFProperties.list(MApplicationPackage.Literals.PART__MENUS);
+ private IListProperty HANDLER_CONTAINER__HANDLERS = EMFProperties.list(MApplicationPackage.Literals.HANDLER_CONTAINER__HANDLERS);
+ private IListProperty BINDING_CONTAINER__BINDINGS = EMFProperties.list(MApplicationPackage.Literals.BINDING_CONTAINER__BINDINGS);
+
+ public IObservable createObservable(Object target) {
+ if( target instanceof IObservableList ) {
+ return (IObservable) target;
+ } else if( target instanceof MModelComponents ) {
+ return MODEL_COMPONENTS__COMPONENTS.observe(target);
+ } else if( target instanceof MModelComponent ) {
+ WritableList list = new WritableList();
+ list.add(new VirtualEntry<Object>( VIRTUAL_MENU, MODEL_COMPONENT__CHILDREN, target, "Menus") {
+
+ @Override
+ protected boolean accepted(Object o) {
+ return false;
+ }
+
+ });
+ list.add(new VirtualEntry<Object>( VIRTUAL_PART, MODEL_COMPONENT__CHILDREN, target, "Parts") {
+
+ @Override
+ protected boolean accepted(Object o) {
+ return o instanceof MPart;
+ }
+
+ });
+ return list;
+ } else if( target instanceof VirtualEntry<?> ) {
+ return ((VirtualEntry<?>)target).getList();
+ } else if( target instanceof MPart ) {
+ WritableList list = new WritableList();
+ list.add(new VirtualEntry<Object>( VIRTUAL_MENU, PART__MENUS, target, "Menus") {
+
+ @Override
+ protected boolean accepted(Object o) {
+ return true;
+ }
+
+ });
+
+ list.add(new VirtualEntry<Object>( VIRTUAL_HANDLER, HANDLER_CONTAINER__HANDLERS, target, "Handlers") {
+
+ @Override
+ protected boolean accepted(Object o) {
+ return true;
+ }
+
+ });
+
+ list.add(new VirtualEntry<Object>( VIRTUAL_BINDING, BINDING_CONTAINER__BINDINGS, target, "Bindings") {
+
+ @Override
+ protected boolean accepted(Object o) {
+ return true;
+ }
+
+ });
+
+ return list;
+ }
+
+ // TODO Auto-generated method stub
+ return null;
+ }
+ }
+} \ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/VirtualEntry.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/VirtualEntry.java
new file mode 100644
index 00000000..a045a765
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/VirtualEntry.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2010 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.e4.tools.emf.ui.internal.common;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.databinding.observable.Diffs;
+import org.eclipse.core.databinding.observable.list.IListChangeListener;
+import org.eclipse.core.databinding.observable.list.IObservableList;
+import org.eclipse.core.databinding.observable.list.ListChangeEvent;
+import org.eclipse.core.databinding.observable.list.ListDiff;
+import org.eclipse.core.databinding.observable.list.WritableList;
+import org.eclipse.core.databinding.property.list.IListProperty;
+
+public abstract class VirtualEntry<M> {
+ private int id;
+ private Object originalParent;
+ private String label;
+ private IObservableList list;
+
+ public VirtualEntry(int id, IListProperty property, Object originalParent, String label) {
+ this.id = id;
+ this.originalParent = originalParent;
+ this.label = label;
+ this.list = new WritableList();
+ IObservableList origList = property.observe(originalParent);
+ list.addAll(cleanedList(origList));
+
+ origList.addListChangeListener(new IListChangeListener() {
+
+ public void handleListChange(ListChangeEvent event) {
+ List<Object> clean = cleanedList(event.getObservableList());
+ ListDiff diff = Diffs.computeListDiff(VirtualEntry.this.list, clean);
+ diff.applyTo(VirtualEntry.this.list);
+ }
+ });
+ }
+
+ private List<Object> cleanedList(IObservableList list) {
+ List<Object> l = new ArrayList<Object>(list.size());
+
+ for( Object o : list ) {
+ if( accepted((M) o) ) {
+ l.add(o);
+ }
+ }
+
+ return l;
+ }
+
+ protected abstract boolean accepted(M o);
+
+ public IObservableList getList() {
+ return list;
+ }
+
+ public Object getOriginalParent() {
+ return originalParent;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ @Override
+ public String toString() {
+ return label;
+ }
+}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ApplicationEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ApplicationEditor.java
new file mode 100644
index 00000000..0e59ccdf
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ApplicationEditor.java
@@ -0,0 +1,53 @@
+package org.eclipse.e4.tools.emf.ui.internal.common.component;
+
+import org.eclipse.core.databinding.DataBindingContext;
+import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.core.databinding.observable.value.WritableValue;
+import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+
+public class ApplicationEditor extends AbstractComponentEditor {
+ private Composite composite;
+ private WritableValue master = new WritableValue();
+ private Image image;
+ private DataBindingContext context;
+
+ @Override
+ public Image getImage(Display display) {
+ if( image == null ) {
+ image = new Image(display, getClass().getClassLoader().getResourceAsStream("/icons/application.png"));
+ }
+
+ return image;
+ }
+
+ @Override
+ public String getLabel() {
+ return "Application";
+ }
+
+ @Override
+ public String getDescription() {
+ return "Application bla, bla, bla";
+ }
+
+ @Override
+ public Composite getEditor(Composite parent, Object object) {
+ if( composite == null ) {
+ context = new DataBindingContext();
+ composite = createForm(parent,context, master);
+ }
+ master.setValue(object);
+ return composite;
+ }
+
+ protected Composite createForm(Composite parent, DataBindingContext context, IObservableValue master) {
+ parent = new Composite(parent,SWT.NONE);
+
+ return parent;
+ }
+
+}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ModelComponentEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ModelComponentEditor.java
new file mode 100644
index 00000000..0b7fe77d
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ModelComponentEditor.java
@@ -0,0 +1,151 @@
+/*******************************************************************************
+ * Copyright (c) 2010 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.e4.tools.emf.ui.internal.common.component;
+
+import org.eclipse.core.databinding.DataBindingContext;
+import org.eclipse.core.databinding.observable.value.WritableValue;
+import org.eclipse.core.databinding.property.value.IValueProperty;
+import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.ui.model.application.MApplicationPackage;
+import org.eclipse.emf.databinding.EMFProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+public class ModelComponentEditor extends AbstractComponentEditor {
+ private Composite composite;
+ private WritableValue master = new WritableValue();
+ private Image image;
+ private DataBindingContext context;
+
+ @Override
+ public Composite getEditor(Composite parent, Object object) {
+ if( composite == null ) {
+ context = new DataBindingContext();
+ composite = createForm(parent);
+ }
+ master.setValue(object);
+ return composite;
+ }
+
+ public void dispose() {
+ if( image != null ) {
+ image.dispose();
+ image = null;
+ }
+
+ if( composite != null ) {
+ composite.dispose();
+ composite = null;
+ }
+
+ if( context != null ) {
+ context.dispose();
+ context = null;
+ }
+ }
+
+ private Composite createForm(Composite parent) {
+ parent = new Composite(parent,SWT.NONE);
+ parent.setLayout(new GridLayout(3, false));
+
+ IValueProperty textProp = WidgetProperties.text();
+
+ Label l = new Label(parent, SWT.NONE);
+ l.setText("Id");
+
+ Text t = new Text(parent, SWT.BORDER);
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan=2;
+ t.setLayoutData(gd);
+ context.bindValue(textProp.observe(t), EMFProperties.value(MApplicationPackage.Literals.APPLICATION_ELEMENT__ID).observeDetail(master));
+
+ // ------------------------------------------------------------
+
+ l = new Label(parent, SWT.NONE);
+ l.setText("Tags");
+
+ t = new Text(parent, SWT.BORDER);
+ gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan=2;
+ t.setLayoutData(gd);
+
+ l = new Label(parent, SWT.NONE);
+ ListViewer viewer = new ListViewer(parent);
+ gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan=2;
+ gd.heightHint = 130;
+ viewer.getList().setLayoutData(gd);
+
+
+ // ------------------------------------------------------------
+
+ l = new Label(parent, SWT.NONE);
+ l.setText("Parent-Id");
+
+ t = new Text(parent, SWT.BORDER);
+ t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ context.bindValue(textProp.observe(t), EMFProperties.value(MApplicationPackage.Literals.MODEL_COMPONENT__PARENT_ID).observeDetail(master));
+
+ Button b = new Button(parent, SWT.PUSH|SWT.FLAT);
+ b.setText("Find ...");
+
+ // ------------------------------------------------------------
+
+ l = new Label(parent, SWT.NONE);
+ l.setText("Position in Parent");
+
+ t = new Text(parent, SWT.BORDER);
+ gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan=2;
+ t.setLayoutData(gd);
+ context.bindValue(textProp.observe(t), EMFProperties.value(MApplicationPackage.Literals.MODEL_COMPONENT__POSITION_IN_PARENT).observeDetail(master));
+
+ // ------------------------------------------------------------
+
+ l = new Label(parent, SWT.NONE);
+ l.setText("Processor");
+
+ t = new Text(parent, SWT.BORDER);
+ gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan=2;
+ t.setLayoutData(gd);
+ context.bindValue(textProp.observe(t), EMFProperties.value(MApplicationPackage.Literals.MODEL_COMPONENT__PROCESSOR).observeDetail(master));
+
+ return parent;
+ }
+
+ @Override
+ public Image getImage(Display display) {
+ if( image == null ) {
+ image = new Image(display, getClass().getClassLoader().getResourceAsStream("/icons/package_go.png"));
+ }
+ return image;
+ }
+
+ @Override
+ public String getLabel() {
+ return "Model Component";
+ }
+
+ @Override
+ public String getDescription() {
+ return "The model component ... bla bla bla";
+ }
+}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ModelComponentsEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ModelComponentsEditor.java
new file mode 100644
index 00000000..3e036d74
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ModelComponentsEditor.java
@@ -0,0 +1,51 @@
+package org.eclipse.e4.tools.emf.ui.internal.common.component;
+
+import org.eclipse.core.databinding.DataBindingContext;
+import org.eclipse.core.databinding.observable.value.WritableValue;
+import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+
+public class ModelComponentsEditor extends AbstractComponentEditor {
+ private Composite composite;
+ private WritableValue master = new WritableValue();
+ private Image image;
+ private DataBindingContext context;
+
+ @Override
+ public Image getImage(Display display) {
+ if( image == null ) {
+ image = new Image(display, getClass().getClassLoader().getResourceAsStream("/icons/application_view_icons.png"));
+ }
+ return image;
+ }
+
+ @Override
+ public String getLabel() {
+ return "Model Components";
+ }
+
+ @Override
+ public String getDescription() {
+ return "Some bla bla bla bla";
+ }
+
+ @Override
+ public Composite getEditor(Composite parent, Object object) {
+ if( composite == null ) {
+ context = new DataBindingContext();
+ composite = createForm(parent);
+ }
+ master.setValue(object);
+ return composite;
+ }
+
+ private Composite createForm(Composite parent) {
+ parent = new Composite(parent, SWT.NONE);
+
+ return parent;
+ }
+
+}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartDescriptorEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartDescriptorEditor.java
new file mode 100644
index 00000000..a4c5748a
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartDescriptorEditor.java
@@ -0,0 +1,37 @@
+package org.eclipse.e4.tools.emf.ui.internal.common.component;
+
+import org.eclipse.core.databinding.DataBindingContext;
+import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.core.databinding.property.value.IValueProperty;
+import org.eclipse.e4.ui.model.application.MApplicationPackage;
+import org.eclipse.emf.databinding.EMFProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+public class PartDescriptorEditor extends PartEditor {
+
+ @Override
+ protected Composite createForm(Composite parent, DataBindingContext context, IObservableValue master) {
+ Composite comp = super.createForm(parent,context,master);
+
+ IValueProperty textProp = WidgetProperties.text();
+
+ Label l = new Label(parent, SWT.NONE);
+ l.setText("Label");
+
+ Text t = new Text(parent, SWT.BORDER);
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan=2;
+ t.setLayoutData(gd);
+ context.bindValue(textProp.observe(t), EMFProperties.value(MApplicationPackage.Literals.UI_LABEL__LABEL).observeDetail(master));
+
+ // ------------------------------------------------------------
+
+
+ return comp;
+ }
+}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartEditor.java
new file mode 100644
index 00000000..1dc0ae91
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartEditor.java
@@ -0,0 +1,206 @@
+package org.eclipse.e4.tools.emf.ui.internal.common.component;
+
+import org.eclipse.core.databinding.DataBindingContext;
+import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.core.databinding.observable.value.WritableValue;
+import org.eclipse.core.databinding.property.value.IValueProperty;
+import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.ui.model.application.MApplicationPackage;
+import org.eclipse.emf.databinding.EMFProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+public class PartEditor extends AbstractComponentEditor {
+ private Composite composite;
+ private WritableValue master = new WritableValue();
+ private Image image;
+ private DataBindingContext context;
+
+ @Override
+ public Image getImage(Display display) {
+ if( image == null ) {
+ image = new Image(display, getClass().getClassLoader().getResourceAsStream("/icons/application_form.png"));
+ }
+
+ return image;
+ }
+
+ @Override
+ public String getLabel() {
+ return "Part Descriptor";
+ }
+
+ @Override
+ public String getDescription() {
+ return "Part Descriptor Bla Bla Bla Bla";
+ }
+
+ @Override
+ public Composite getEditor(Composite parent, Object object) {
+ if( composite == null ) {
+ context = new DataBindingContext();
+ composite = createForm(parent,context, master);
+ }
+ master.setValue(object);
+ return composite;
+ }
+
+ protected Composite createForm(Composite parent, DataBindingContext context, IObservableValue master) {
+ parent = new Composite(parent,SWT.NONE);
+ parent.setLayout(new GridLayout(3, false));
+
+ IValueProperty textProp = WidgetProperties.text();
+
+ Label l = new Label(parent, SWT.NONE);
+ l.setText("Id");
+
+ Text t = new Text(parent, SWT.BORDER);
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan=2;
+ t.setLayoutData(gd);
+ context.bindValue(textProp.observe(t), EMFProperties.value(MApplicationPackage.Literals.APPLICATION_ELEMENT__ID).observeDetail(master));
+
+ // ------------------------------------------------------------
+
+ l = new Label(parent, SWT.NONE);
+ l.setText("Tags");
+
+ t = new Text(parent, SWT.BORDER);
+ gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan=2;
+ t.setLayoutData(gd);
+
+ l = new Label(parent, SWT.NONE);
+ ListViewer viewer = new ListViewer(parent);
+ gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan=2;
+ gd.heightHint = 80;
+ viewer.getList().setLayoutData(gd);
+
+ // ------------------------------------------------------------
+
+ l = new Label(parent, SWT.NONE);
+ l.setText("Label");
+
+ t = new Text(parent, SWT.BORDER);
+ gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan=2;
+ t.setLayoutData(gd);
+ context.bindValue(textProp.observe(t), EMFProperties.value(MApplicationPackage.Literals.UI_LABEL__LABEL).observeDetail(master));
+
+ // ------------------------------------------------------------
+
+ l = new Label(parent, SWT.NONE);
+ l.setText("Tooltip");
+
+ t = new Text(parent, SWT.BORDER);
+ gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan=2;
+ t.setLayoutData(gd);
+ context.bindValue(textProp.observe(t), EMFProperties.value(MApplicationPackage.Literals.UI_LABEL__TOOLTIP).observeDetail(master));
+
+ // ------------------------------------------------------------
+
+ l = new Label(parent, SWT.NONE);
+ l.setText("Icon URI");
+
+ t = new Text(parent, SWT.BORDER);
+ t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ context.bindValue(textProp.observe(t), EMFProperties.value(MApplicationPackage.Literals.UI_LABEL__ICON_URI).observeDetail(master));
+
+ Button b = new Button(parent, SWT.PUSH|SWT.FLAT);
+ b.setText("Find ...");
+
+ // ------------------------------------------------------------
+
+ l = new Label(parent, SWT.NONE);
+ l.setText("Class URI");
+
+ t = new Text(parent, SWT.BORDER);
+ t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ context.bindValue(textProp.observe(t), EMFProperties.value(MApplicationPackage.Literals.CONTRIBUTION__URI).observeDetail(master));
+
+ b = new Button(parent, SWT.PUSH|SWT.FLAT);
+ b.setText("Find ...");
+
+ // ------------------------------------------------------------
+
+ l = new Label(parent, SWT.NONE);
+ l.setText("Variables");
+
+ t = new Text(parent, SWT.BORDER);
+ gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan=2;
+ t.setLayoutData(gd);
+
+ l = new Label(parent, SWT.NONE);
+ viewer = new ListViewer(parent);
+ gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan=2;
+ gd.heightHint = 80;
+ viewer.getList().setLayoutData(gd);
+
+ // ------------------------------------------------------------
+
+ l = new Label(parent, SWT.NONE);
+ l.setText("Properties");
+
+ t = new Text(parent, SWT.BORDER);
+ gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan=2;
+ t.setLayoutData(gd);
+
+ l = new Label(parent, SWT.NONE);
+ TableViewer tableviewer = new TableViewer(parent);
+ gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan=2;
+ gd.heightHint = 80;
+ tableviewer.getTable().setHeaderVisible(true);
+ tableviewer.getControl().setLayoutData(gd);
+
+ TableViewerColumn column = new TableViewerColumn(tableviewer, SWT.NONE);
+ column.getColumn().setText("Key");
+ column.getColumn().setWidth(200);
+
+ column = new TableViewerColumn(tableviewer, SWT.NONE);
+ column.getColumn().setText("Value");
+ column.getColumn().setWidth(200);
+
+ // ------------------------------------------------------------
+
+ l = new Label(parent, SWT.NONE);
+ l.setText("");
+
+ Composite booleanContainer = new Composite(parent,SWT.NONE);
+ gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan=2;
+ booleanContainer.setBackgroundMode(SWT.INHERIT_DEFAULT);
+ booleanContainer.setLayoutData(gd);
+ booleanContainer.setLayout(new GridLayout(4,false));
+
+ Button checkbox = new Button(booleanContainer, SWT.CHECK);
+ checkbox.setText("to render");
+
+ checkbox = new Button(booleanContainer, SWT.CHECK);
+ checkbox.setText("on Top");
+
+ checkbox = new Button(booleanContainer, SWT.CHECK);
+ checkbox.setText("visible");
+
+ checkbox = new Button(booleanContainer, SWT.CHECK);
+ checkbox.setText("closeable");
+
+ return parent;
+ }
+}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/wbe/ExtensionModelEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/wbe/ExtensionModelEditor.java
new file mode 100644
index 00000000..34636af5
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/wbe/ExtensionModelEditor.java
@@ -0,0 +1,5 @@
+package org.eclipse.e4.tools.emf.ui.internal.wbe;
+
+public class ExtensionModelEditor {
+
+}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/wbm/ApplicationModelEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/wbm/ApplicationModelEditor.java
new file mode 100644
index 00000000..d140e5bd
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/wbm/ApplicationModelEditor.java
@@ -0,0 +1,16 @@
+package org.eclipse.e4.tools.emf.ui.internal.wbm;
+
+import javax.inject.Inject;
+
+import org.eclipse.e4.tools.emf.ui.common.IModelResource;
+import org.eclipse.e4.tools.emf.ui.internal.common.ModelEditor;
+import org.eclipse.swt.widgets.Composite;
+
+public class ApplicationModelEditor extends ModelEditor {
+ @Inject
+ public ApplicationModelEditor(Composite composite,
+ IModelResource modelProvider) {
+ super(composite, modelProvider);
+ }
+
+}

Back to the top