initial nattable.core, e4 app projects
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a10482b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+/.metadata/
+
+bin/
diff --git a/org.eclipse.nebula.widgets.nattable.app/.classpath b/org.eclipse.nebula.widgets.nattable.app/.classpath
new file mode 100644
index 0000000..098194c
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.app/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.nebula.widgets.nattable.app/.project b/org.eclipse.nebula.widgets.nattable.app/.project
new file mode 100644
index 0000000..d562047
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.app/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.nebula.widgets.nattable.app</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/org.eclipse.nebula.widgets.nattable.app/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.nebula.widgets.nattable.app/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.app/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.nebula.widgets.nattable.app/.settings/org.eclipse.pde.core.prefs b/org.eclipse.nebula.widgets.nattable.app/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..f29e940
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.app/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/org.eclipse.nebula.widgets.nattable.app/Application.e4xmi b/org.eclipse.nebula.widgets.nattable.app/Application.e4xmi
new file mode 100644
index 0000000..7a32d27
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.app/Application.e4xmi
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<application:Application xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:advanced="http://www.eclipse.org/ui/2010/UIModel/application/ui/advanced" xmlns:application="http://www.eclipse.org/ui/2010/UIModel/application" xmlns:basic="http://www.eclipse.org/ui/2010/UIModel/application/ui/basic" xmlns:menu="http://www.eclipse.org/ui/2010/UIModel/application/ui/menu" xmi:id="_ah7NUDQUEeKwNq_-kmT7bA" elementId="org.eclipse.e4.ide.application" bindingContexts="_ah70ZzQUEeKwNq_-kmT7bA">
+ <children xsi:type="basic:TrimmedWindow" xmi:id="_ah70YDQUEeKwNq_-kmT7bA" label="org.eclipse.nebula.widgets.nattable.app" width="500" height="400">
+ <children xsi:type="advanced:PerspectiveStack" xmi:id="_ah8bcjQUEeKwNq_-kmT7bA">
+ <children xsi:type="advanced:Perspective" xmi:id="_ah8bczQUEeKwNq_-kmT7bA">
+ <children xsi:type="basic:PartSashContainer" xmi:id="_ah8bdDQUEeKwNq_-kmT7bA">
+ <children xsi:type="basic:PartStack" xmi:id="_ah8bdTQUEeKwNq_-kmT7bA">
+ <children xsi:type="basic:Part" xmi:id="_ah8bdjQUEeKwNq_-kmT7bA" contributionURI="bundleclass://org.eclipse.nebula.widgets.nattable.app/org.eclipse.nebula.widgets.nattable.app.parts.SamplePart" label="Sample Part"/>
+ </children>
+ </children>
+ </children>
+ </children>
+ <mainMenu xmi:id="_ah70dzQUEeKwNq_-kmT7bA" elementId="menu:org.eclipse.ui.main.menu">
+ <children xsi:type="menu:Menu" xmi:id="_ah70eDQUEeKwNq_-kmT7bA" label="File">
+ <children xsi:type="menu:HandledMenuItem" xmi:id="_ah70eTQUEeKwNq_-kmT7bA" label="Open" iconURI="platform:/plugin/org.eclipse.nebula.widgets.nattable.app/icons/sample.gif" command="_ah70bjQUEeKwNq_-kmT7bA"/>
+ <children xsi:type="menu:HandledMenuItem" xmi:id="_ah70ejQUEeKwNq_-kmT7bA" label="Save" iconURI="platform:/plugin/org.eclipse.nebula.widgets.nattable.app/icons/save_edit.gif" command="_ah70cTQUEeKwNq_-kmT7bA"/>
+ <children xsi:type="menu:HandledMenuItem" xmi:id="_ah70ezQUEeKwNq_-kmT7bA" label="Quit" command="_ah70ajQUEeKwNq_-kmT7bA"/>
+ </children>
+ <children xsi:type="menu:Menu" xmi:id="_ah8bcDQUEeKwNq_-kmT7bA" label="Help">
+ <children xsi:type="menu:HandledMenuItem" xmi:id="_ah8bcTQUEeKwNq_-kmT7bA" label="About" command="_ah70dDQUEeKwNq_-kmT7bA"/>
+ </children>
+ </mainMenu>
+ <trimBars xmi:id="_ah8bdzQUEeKwNq_-kmT7bA">
+ <children xsi:type="menu:ToolBar" xmi:id="_ah8beDQUEeKwNq_-kmT7bA" elementId="toolbar:org.eclipse.ui.main.toolbar">
+ <children xsi:type="menu:HandledToolItem" xmi:id="_ah8beTQUEeKwNq_-kmT7bA" iconURI="platform:/plugin/org.eclipse.nebula.widgets.nattable.app/icons/sample.gif" command="_ah70bjQUEeKwNq_-kmT7bA"/>
+ <children xsi:type="menu:HandledToolItem" xmi:id="_ah8bejQUEeKwNq_-kmT7bA" iconURI="platform:/plugin/org.eclipse.nebula.widgets.nattable.app/icons/save_edit.gif" command="_ah70cTQUEeKwNq_-kmT7bA"/>
+ </children>
+ </trimBars>
+ </children>
+ <handlers xmi:id="_ah70azQUEeKwNq_-kmT7bA" contributionURI="bundleclass://org.eclipse.nebula.widgets.nattable.app/org.eclipse.nebula.widgets.nattable.app.handlers.QuitHandler" command="_ah70ajQUEeKwNq_-kmT7bA"/>
+ <handlers xmi:id="_ah70bzQUEeKwNq_-kmT7bA" contributionURI="bundleclass://org.eclipse.nebula.widgets.nattable.app/org.eclipse.nebula.widgets.nattable.app.handlers.OpenHandler" command="_ah70bjQUEeKwNq_-kmT7bA"/>
+ <handlers xmi:id="_ah70cjQUEeKwNq_-kmT7bA" contributionURI="bundleclass://org.eclipse.nebula.widgets.nattable.app/org.eclipse.nebula.widgets.nattable.app.handlers.SaveHandler" command="_ah70cTQUEeKwNq_-kmT7bA"/>
+ <handlers xmi:id="_ah70dTQUEeKwNq_-kmT7bA" contributionURI="bundleclass://org.eclipse.nebula.widgets.nattable.app/org.eclipse.nebula.widgets.nattable.app.handlers.AboutHandler" command="_ah70dDQUEeKwNq_-kmT7bA"/>
+ <bindingTables xmi:id="_ah70bDQUEeKwNq_-kmT7bA" bindingContext="_ah70ZzQUEeKwNq_-kmT7bA">
+ <bindings xmi:id="_ah70bTQUEeKwNq_-kmT7bA" keySequence="M1+Q" command="_ah70ajQUEeKwNq_-kmT7bA"/>
+ <bindings xmi:id="_ah70cDQUEeKwNq_-kmT7bA" keySequence="M1+O" command="_ah70bjQUEeKwNq_-kmT7bA"/>
+ <bindings xmi:id="_ah70czQUEeKwNq_-kmT7bA" keySequence="M1+S" command="_ah70cTQUEeKwNq_-kmT7bA"/>
+ <bindings xmi:id="_ah70djQUEeKwNq_-kmT7bA" keySequence="M1+A" command="_ah70dDQUEeKwNq_-kmT7bA"/>
+ </bindingTables>
+ <rootContext xmi:id="_ah70ZzQUEeKwNq_-kmT7bA" elementId="org.eclipse.ui.contexts.dialogAndWindow" name="In Dialog and Windows">
+ <children xmi:id="_ah70aDQUEeKwNq_-kmT7bA" elementId="org.eclipse.ui.contexts.window" name="In Windows"/>
+ <children xmi:id="_ah70aTQUEeKwNq_-kmT7bA" elementId="org.eclipse.ui.contexts.dialog" name="In Dialogs"/>
+ </rootContext>
+ <commands xmi:id="_ah70ajQUEeKwNq_-kmT7bA" elementId="org.eclipse.ui.file.exit" commandName="quitCommand"/>
+ <commands xmi:id="_ah70bjQUEeKwNq_-kmT7bA" elementId="org.eclipse.nebula.widgets.nattable.app.open" commandName="openCommand"/>
+ <commands xmi:id="_ah70cTQUEeKwNq_-kmT7bA" elementId="org.eclipse.ui.file.save" commandName="saveCommand"/>
+ <commands xmi:id="_ah70dDQUEeKwNq_-kmT7bA" elementId="org.eclipse.ui.help.aboutAction" commandName="aboutCommand"/>
+ <addons xmi:id="_ah70YTQUEeKwNq_-kmT7bA" elementId="org.eclipse.e4.core.commands.service" contributionURI="bundleclass://org.eclipse.e4.core.commands/org.eclipse.e4.core.commands.CommandServiceAddon"/>
+ <addons xmi:id="_ah70YjQUEeKwNq_-kmT7bA" elementId="org.eclipse.e4.ui.contexts.service" contributionURI="bundleclass://org.eclipse.e4.ui.services/org.eclipse.e4.ui.services.ContextServiceAddon"/>
+ <addons xmi:id="_ah70YzQUEeKwNq_-kmT7bA" elementId="org.eclipse.e4.ui.bindings.service" contributionURI="bundleclass://org.eclipse.e4.ui.bindings/org.eclipse.e4.ui.bindings.BindingServiceAddon"/>
+ <addons xmi:id="_ah70ZDQUEeKwNq_-kmT7bA" elementId="org.eclipse.e4.ui.workbench.commands.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.CommandProcessingAddon"/>
+ <addons xmi:id="_ah70ZTQUEeKwNq_-kmT7bA" elementId="org.eclipse.e4.ui.workbench.contexts.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.ContextProcessingAddon"/>
+ <addons xmi:id="_ah70ZjQUEeKwNq_-kmT7bA" elementId="org.eclipse.e4.ui.workbench.bindings.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench.swt/org.eclipse.e4.ui.workbench.swt.util.BindingProcessingAddon"/>
+</application:Application>
diff --git a/org.eclipse.nebula.widgets.nattable.app/META-INF/MANIFEST.MF b/org.eclipse.nebula.widgets.nattable.app/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c1b280b
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.app/META-INF/MANIFEST.MF
@@ -0,0 +1,26 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: NatTable App
+Bundle-SymbolicName: org.eclipse.nebula.widgets.nattable.app; singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Require-Bundle: javax.inject;bundle-version="1.0.0",
+ org.eclipse.core.runtime;bundle-version="3.8.0",
+ org.eclipse.swt;bundle-version="3.100.1",
+ org.eclipse.core.databinding;bundle-version="1.4.1",
+ org.eclipse.core.databinding.beans;bundle-version="1.2.200",
+ org.eclipse.jface;bundle-version="3.8.101",
+ org.eclipse.jface.databinding;bundle-version="1.6.0",
+ org.eclipse.e4.ui.services;bundle-version="0.10.2",
+ org.eclipse.e4.ui.workbench;bundle-version="0.10.3",
+ org.eclipse.e4.core.services;bundle-version="1.0.0",
+ org.eclipse.e4.core.di;bundle-version="1.1.0",
+ org.eclipse.e4.ui.di;bundle-version="0.10.1",
+ org.eclipse.e4.core.contexts;bundle-version="1.1.0",
+ org.eclipse.e4.ui.workbench.swt;bundle-version="0.10.2",
+ org.eclipse.core.databinding.property;bundle-version="1.4.100",
+ org.eclipse.e4.ui.css.core;bundle-version="0.10.2",
+ org.w3c.css.sac;bundle-version="1.3.1",
+ org.eclipse.e4.core.commands;bundle-version="0.10.1",
+ org.eclipse.e4.ui.bindings;bundle-version="0.10.1",
+ org.eclipse.nebula.widgets.nattable.core;bundle-version="1.0.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
diff --git a/org.eclipse.nebula.widgets.nattable.app/build.properties b/org.eclipse.nebula.widgets.nattable.app/build.properties
new file mode 100644
index 0000000..026e9c1
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.app/build.properties
@@ -0,0 +1,6 @@
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ css/default.css
+source.. = src/
diff --git a/org.eclipse.nebula.widgets.nattable.app/css/default.css b/org.eclipse.nebula.widgets.nattable.app/css/default.css
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.app/css/default.css
diff --git a/org.eclipse.nebula.widgets.nattable.app/icons/sample.gif b/org.eclipse.nebula.widgets.nattable.app/icons/sample.gif
new file mode 100644
index 0000000..34fb3c9
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.app/icons/sample.gif
Binary files differ
diff --git a/org.eclipse.nebula.widgets.nattable.app/icons/save_edit.gif b/org.eclipse.nebula.widgets.nattable.app/icons/save_edit.gif
new file mode 100644
index 0000000..499dd0c
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.app/icons/save_edit.gif
Binary files differ
diff --git a/org.eclipse.nebula.widgets.nattable.app/org.eclipse.nebula.widgets.nattable.app.product b/org.eclipse.nebula.widgets.nattable.app/org.eclipse.nebula.widgets.nattable.app.product
new file mode 100644
index 0000000..c7b2c93
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.app/org.eclipse.nebula.widgets.nattable.app.product
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?pde version="3.5"?>
+
+<product name="org.eclipse.nebula.widgets.nattable.app" uid="org.eclipse.nebula.widgets.nattable.app.product" id="org.eclipse.nebula.widgets.nattable.app.product" application="org.eclipse.e4.ui.workbench.swt.E4Application" version="1.0.0.qualifier" useFeatures="false" includeLaunchers="true">
+
+ <configIni use="default">
+ </configIni>
+
+ <launcherArgs>
+ <programArgs>-clearPersistedState</programArgs>
+ <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac>
+ </launcherArgs>
+
+ <windowImages/>
+
+ <plugins>
+ <plugin id="com.ibm.icu"/>
+ <plugin id="javax.annotation"/>
+ <plugin id="javax.inject"/>
+ <plugin id="javax.xml"/>
+ <plugin id="org.apache.batik.css"/>
+ <plugin id="org.apache.batik.util"/>
+ <plugin id="org.apache.batik.util.gui"/>
+ <plugin id="org.apache.commons.logging"/>
+ <plugin id="org.eclipse.core.commands"/>
+ <plugin id="org.eclipse.core.contenttype"/>
+ <plugin id="org.eclipse.core.databinding"/>
+ <plugin id="org.eclipse.core.databinding.beans"/>
+ <plugin id="org.eclipse.core.databinding.observable"/>
+ <plugin id="org.eclipse.core.databinding.property"/>
+ <plugin id="org.eclipse.core.expressions"/>
+ <plugin id="org.eclipse.core.filesystem"/>
+ <plugin id="org.eclipse.core.filesystem.aix.ppc" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.hpux.ia64_32" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.linux.ppc" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.linux.x86" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.linux.x86_64" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.macosx" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.solaris.sparc" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.win32.x86" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.win32.x86_64" fragment="true"/>
+ <plugin id="org.eclipse.core.jobs"/>
+ <plugin id="org.eclipse.core.resources"/>
+ <plugin id="org.eclipse.core.resources.win32.x86" fragment="true"/>
+ <plugin id="org.eclipse.core.runtime"/>
+ <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/>
+ <plugin id="org.eclipse.e4.core.commands"/>
+ <plugin id="org.eclipse.e4.core.contexts"/>
+ <plugin id="org.eclipse.e4.core.di"/>
+ <plugin id="org.eclipse.e4.core.di.extensions"/>
+ <plugin id="org.eclipse.e4.core.services"/>
+ <plugin id="org.eclipse.e4.ui.bindings"/>
+ <plugin id="org.eclipse.e4.ui.css.core"/>
+ <plugin id="org.eclipse.e4.ui.css.swt"/>
+ <plugin id="org.eclipse.e4.ui.css.swt.theme"/>
+ <plugin id="org.eclipse.e4.ui.di"/>
+ <plugin id="org.eclipse.e4.ui.model.workbench"/>
+ <plugin id="org.eclipse.e4.ui.services"/>
+ <plugin id="org.eclipse.e4.ui.widgets"/>
+ <plugin id="org.eclipse.e4.ui.workbench"/>
+ <plugin id="org.eclipse.e4.ui.workbench.renderers.swt"/>
+ <plugin id="org.eclipse.e4.ui.workbench.swt"/>
+ <plugin id="org.eclipse.e4.ui.workbench3"/>
+ <plugin id="org.eclipse.emf.common"/>
+ <plugin id="org.eclipse.emf.databinding"/>
+ <plugin id="org.eclipse.emf.ecore"/>
+ <plugin id="org.eclipse.emf.ecore.change"/>
+ <plugin id="org.eclipse.emf.ecore.xmi"/>
+ <plugin id="org.eclipse.equinox.app"/>
+ <plugin id="org.eclipse.equinox.common"/>
+ <plugin id="org.eclipse.equinox.concurrent"/>
+ <plugin id="org.eclipse.equinox.ds"/>
+ <plugin id="org.eclipse.equinox.event"/>
+ <plugin id="org.eclipse.equinox.preferences"/>
+ <plugin id="org.eclipse.equinox.registry"/>
+ <plugin id="org.eclipse.equinox.util"/>
+ <plugin id="org.eclipse.jface"/>
+ <plugin id="org.eclipse.jface.databinding"/>
+ <plugin id="org.eclipse.nebula.widgets.nattable.app"/>
+ <plugin id="org.eclipse.osgi"/>
+ <plugin id="org.eclipse.osgi.services"/>
+ <plugin id="org.eclipse.swt"/>
+ <plugin id="org.eclipse.swt.carbon.macosx" fragment="true"/>
+ <plugin id="org.eclipse.swt.cocoa.macosx" fragment="true"/>
+ <plugin id="org.eclipse.swt.cocoa.macosx.x86_64" fragment="true"/>
+ <plugin id="org.eclipse.swt.gtk.linux.ppc" fragment="true"/>
+ <plugin id="org.eclipse.swt.gtk.linux.ppc64" fragment="true"/>
+ <plugin id="org.eclipse.swt.gtk.linux.s390" fragment="true"/>
+ <plugin id="org.eclipse.swt.gtk.linux.s390x" fragment="true"/>
+ <plugin id="org.eclipse.swt.gtk.linux.x86" fragment="true"/>
+ <plugin id="org.eclipse.swt.gtk.linux.x86_64" fragment="true"/>
+ <plugin id="org.eclipse.swt.gtk.solaris.sparc" fragment="true"/>
+ <plugin id="org.eclipse.swt.gtk.solaris.x86" fragment="true"/>
+ <plugin id="org.eclipse.swt.motif.aix.ppc" fragment="true"/>
+ <plugin id="org.eclipse.swt.motif.hpux.ia64_32" fragment="true"/>
+ <plugin id="org.eclipse.swt.motif.linux.x86" fragment="true"/>
+ <plugin id="org.eclipse.swt.motif.solaris.sparc" fragment="true"/>
+ <plugin id="org.eclipse.swt.photon.qnx.x86" fragment="true"/>
+ <plugin id="org.eclipse.swt.win32.win32.x86" fragment="true"/>
+ <plugin id="org.eclipse.swt.win32.win32.x86_64" fragment="true"/>
+ <plugin id="org.w3c.css.sac"/>
+ <plugin id="org.w3c.dom.smil"/>
+ <plugin id="org.w3c.dom.svg"/>
+ </plugins>
+
+
+</product>
diff --git a/org.eclipse.nebula.widgets.nattable.app/plugin.xml b/org.eclipse.nebula.widgets.nattable.app/plugin.xml
new file mode 100644
index 0000000..c173988
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.app/plugin.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin>
+
+ <extension
+ id="product"
+ point="org.eclipse.core.runtime.products">
+ <product
+ name="org.eclipse.nebula.widgets.nattable.app"
+ application="org.eclipse.e4.ui.workbench.swt.E4Application">
+ <property
+ name="RICH_SAMPLE"
+ value="TRUE">
+ </property>
+ <property
+ name="clearPersistedState"
+ value="true">
+ </property>
+ <property
+ name="applicationCSS"
+ value="platform:/plugin/org.eclipse.nebula.widgets.nattable.app/css/default.css">
+ </property>
+ <property
+ name="appName"
+ value="org.eclipse.nebula.widgets.nattable.app">
+ </property>
+ </product>
+ </extension>
+
+</plugin>
diff --git a/org.eclipse.nebula.widgets.nattable.app/src/org/eclipse/nebula/widgets/nattable/app/handlers/AboutHandler.java b/org.eclipse.nebula.widgets.nattable.app/src/org/eclipse/nebula/widgets/nattable/app/handlers/AboutHandler.java
new file mode 100644
index 0000000..a1505e3
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.app/src/org/eclipse/nebula/widgets/nattable/app/handlers/AboutHandler.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.nebula.widgets.nattable.app.handlers;
+
+import javax.inject.Named;
+
+import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Shell;
+
+public class AboutHandler {
+ @Execute
+ public void execute(@Named(IServiceConstants.ACTIVE_SHELL) Shell shell) {
+ MessageDialog.openInformation(shell, "About", "e4 Application example.");
+ }
+}
diff --git a/org.eclipse.nebula.widgets.nattable.app/src/org/eclipse/nebula/widgets/nattable/app/handlers/OpenHandler.java b/org.eclipse.nebula.widgets.nattable.app/src/org/eclipse/nebula/widgets/nattable/app/handlers/OpenHandler.java
new file mode 100644
index 0000000..cd3945d
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.app/src/org/eclipse/nebula/widgets/nattable/app/handlers/OpenHandler.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.nebula.widgets.nattable.app.handlers;
+
+import java.lang.reflect.InvocationTargetException;
+
+import javax.inject.Named;
+
+import org.eclipse.e4.core.contexts.IEclipseContext;
+import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Shell;
+
+public class OpenHandler {
+
+ @Execute
+ public void execute(
+ IEclipseContext context,
+ @Named(IServiceConstants.ACTIVE_SHELL) Shell shell)
+ throws InvocationTargetException, InterruptedException {
+ FileDialog dialog = new FileDialog(shell);
+ dialog.open();
+ }
+}
diff --git a/org.eclipse.nebula.widgets.nattable.app/src/org/eclipse/nebula/widgets/nattable/app/handlers/QuitHandler.java b/org.eclipse.nebula.widgets.nattable.app/src/org/eclipse/nebula/widgets/nattable/app/handlers/QuitHandler.java
new file mode 100644
index 0000000..c65ff2b
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.app/src/org/eclipse/nebula/widgets/nattable/app/handlers/QuitHandler.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.nebula.widgets.nattable.app.handlers;
+
+import java.lang.reflect.InvocationTargetException;
+
+import javax.inject.Named;
+
+import org.eclipse.e4.core.contexts.IEclipseContext;
+import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.e4.ui.workbench.IWorkbench;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Shell;
+
+public class QuitHandler {
+ @Execute
+ public void execute(IWorkbench workbench, IEclipseContext context,
+ @Named(IServiceConstants.ACTIVE_SHELL) Shell shell)
+ throws InvocationTargetException, InterruptedException {
+ if (MessageDialog.openConfirm(shell, "Confirmation",
+ "Do you want to exit?")) {
+ workbench.close();
+ }
+ }
+}
diff --git a/org.eclipse.nebula.widgets.nattable.app/src/org/eclipse/nebula/widgets/nattable/app/handlers/SaveHandler.java b/org.eclipse.nebula.widgets.nattable.app/src/org/eclipse/nebula/widgets/nattable/app/handlers/SaveHandler.java
new file mode 100644
index 0000000..91a1aa4
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.app/src/org/eclipse/nebula/widgets/nattable/app/handlers/SaveHandler.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.nebula.widgets.nattable.app.handlers;
+
+import java.lang.reflect.InvocationTargetException;
+
+import javax.inject.Named;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.e4.core.contexts.ContextInjectionFactory;
+import org.eclipse.e4.core.contexts.IEclipseContext;
+import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.e4.core.di.annotations.CanExecute;
+import org.eclipse.e4.ui.model.application.MContribution;
+import org.eclipse.e4.ui.model.application.ui.MDirtyable;
+import org.eclipse.e4.ui.services.IServiceConstants;
+//import org.eclipse.e4.ui.workbench.Persist;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.swt.widgets.Shell;
+
+public class SaveHandler {
+ @CanExecute
+ public boolean canExecute(
+ @Named(IServiceConstants.ACTIVE_PART) MDirtyable dirtyable) {
+ if (dirtyable == null) {
+ return false;
+ }
+ return dirtyable.isDirty();
+ }
+
+ @Execute
+ public void execute(
+ IEclipseContext context,
+ @Named(IServiceConstants.ACTIVE_SHELL) Shell shell,
+ @Named(IServiceConstants.ACTIVE_PART) final MContribution contribution)
+ throws InvocationTargetException, InterruptedException {
+ final IEclipseContext pmContext = context.createChild();
+
+ ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell);
+ dialog.open();
+ dialog.run(true, true, new IRunnableWithProgress() {
+ public void run(IProgressMonitor monitor)
+ throws InvocationTargetException, InterruptedException {
+ pmContext.set(IProgressMonitor.class.getName(), monitor);
+ if (contribution != null) {
+ Object clientObject = contribution.getObject();
+// ContextInjectionFactory.invoke(clientObject, Persist.class, //$NON-NLS-1$
+// pmContext, null);
+ }
+ }
+ });
+
+ pmContext.dispose();
+ }
+}
diff --git a/org.eclipse.nebula.widgets.nattable.app/src/org/eclipse/nebula/widgets/nattable/app/parts/SamplePart.java b/org.eclipse.nebula.widgets.nattable.app/src/org/eclipse/nebula/widgets/nattable/app/parts/SamplePart.java
new file mode 100644
index 0000000..a24db27
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.app/src/org/eclipse/nebula/widgets/nattable/app/parts/SamplePart.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.nebula.widgets.nattable.app.parts;
+
+import javax.annotation.PostConstruct;
+
+import org.eclipse.e4.ui.di.Focus;
+import org.eclipse.nebula.widgets.nattable.core.NatTable;
+import org.eclipse.swt.SWT;
+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 SamplePart {
+
+ private Label label;
+ private NatTable natTable;
+
+ @PostConstruct
+ public void createComposite(Composite parent) {
+ parent.setLayout(new GridLayout());
+
+ label = new Label(parent, SWT.NONE);
+ label.setText("Sample table");
+
+ natTable = new NatTable(parent);
+ natTable.setLayoutData(new GridData(GridData.FILL_BOTH));
+ }
+
+ @Focus
+ public void setFocus() {
+ natTable.setFocus();
+ }
+}
diff --git a/org.eclipse.nebula.widgets.nattable.core/.classpath b/org.eclipse.nebula.widgets.nattable.core/.classpath
new file mode 100644
index 0000000..098194c
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.core/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.nebula.widgets.nattable.core/.project b/org.eclipse.nebula.widgets.nattable.core/.project
new file mode 100644
index 0000000..2e30a2f
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.core/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.nebula.widgets.nattable.core</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/org.eclipse.nebula.widgets.nattable.core/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.nebula.widgets.nattable.core/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.core/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.nebula.widgets.nattable.core/META-INF/MANIFEST.MF b/org.eclipse.nebula.widgets.nattable.core/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..cdaf85a
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.core/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: NatTable Core
+Bundle-SymbolicName: org.eclipse.nebula.widgets.nattable.core
+Bundle-Version: 1.0.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Import-Package: org.eclipse.swt,
+ org.eclipse.swt.events,
+ org.eclipse.swt.graphics,
+ org.eclipse.swt.widgets
+Export-Package: org.eclipse.nebula.widgets.nattable.core
diff --git a/org.eclipse.nebula.widgets.nattable.core/build.properties b/org.eclipse.nebula.widgets.nattable.core/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.core/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/NatTable.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/NatTable.java
new file mode 100644
index 0000000..8e913e9
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/NatTable.java
@@ -0,0 +1,687 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Original authors 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:
+ * Original authors and others - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.nebula.widgets.nattable.core;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.ScrollBar;
+
+public class NatTable extends Canvas implements PaintListener
+// , ILayer, IClientAreaProvider, ILayerListener, IPersistable
+ {
+
+ public static final int DEFAULT_STYLE_OPTIONS = SWT.NO_BACKGROUND | SWT.NO_REDRAW_RESIZE | SWT.DOUBLE_BUFFERED | SWT.V_SCROLL | SWT.H_SCROLL;
+
+// private UiBindingRegistry uiBindingRegistry;
+//
+// private ModeSupport modeSupport;
+//
+// private final EventConflaterChain conflaterChain = new EventConflaterChain();
+//
+// private final List<IOverlayPainter> overlayPainters = new ArrayList<IOverlayPainter>();
+//
+// private final List<IPersistable> persistables = new LinkedList<IPersistable>();
+//
+// private ILayer underlyingLayer;
+//
+// private IConfigRegistry configRegistry;
+//
+// protected final Collection<IConfiguration> configurations = new LinkedList<IConfiguration>();
+//
+// protected String id = GUIHelper.getSequenceNumber();
+//
+// private ILayerPainter layerPainter = new NatLayerPainter(this);
+//
+// private final boolean autoconfigure;
+
+ public NatTable(Composite parent) {
+ this(parent, DEFAULT_STYLE_OPTIONS);
+ }
+
+// /**
+// * @param parent widget for the table.
+// * @param autoconfigure if set to False
+// * - No auto configuration is done
+// * - Default settings are <i>not</i> loaded. Configuration(s) have to be manually
+// * added by invoking addConfiguration(). At the minimum the {@link DefaultNatTableStyleConfiguration}
+// * must be added for the table to render.
+// */
+// public NatTable(Composite parent, boolean autoconfigure) {
+// this(parent, DEFAULT_STYLE_OPTIONS, autoconfigure);
+// }
+//
+// public NatTable(Composite parent, ILayer layer) {
+// this(parent, DEFAULT_STYLE_OPTIONS, layer);
+// }
+//
+// public NatTable(Composite parent, ILayer layer, boolean autoconfigure) {
+// this(parent, DEFAULT_STYLE_OPTIONS, layer, autoconfigure);
+// }
+
+ public NatTable(Composite parent, final int style) {
+// this(parent, style, new DummyGridLayerStack());
+// }
+//
+// public NatTable(Composite parent, final int style, boolean autoconfigure) {
+// this(parent, style, new DummyGridLayerStack(), autoconfigure);
+// }
+//
+// public NatTable(final Composite parent, final int style, ILayer layer) {
+// this(parent, style, layer, true);
+// }
+//
+// public NatTable(final Composite parent, final int style, final ILayer layer, boolean autoconfigure) {
+ super(parent, style);
+
+ // Disable scroll bars by default; if a Viewport is available, it will enable the scroll bars
+ disableScrollBar(getHorizontalBar());
+ disableScrollBar(getVerticalBar());
+
+// initInternalListener();
+//
+// internalSetLayer(layer);
+//
+// this.autoconfigure = autoconfigure;
+// if (autoconfigure) {
+// configurations.add(new DefaultNatTableStyleConfiguration());
+// configure();
+// }
+//
+// conflaterChain.add(getVisualChangeEventConflater());
+// conflaterChain.start();
+//
+// addDisposeListener(new DisposeListener() {
+//
+// public void widgetDisposed(DisposeEvent e) {
+// doCommand(new DisposeResourcesCommand());
+// conflaterChain.stop();
+// InlineCellEditController.dispose();
+// ActiveCellEditor.close();
+//
+// layer.dispose();
+// }
+//
+// });
+ }
+
+// protected IEventConflater getVisualChangeEventConflater() {
+// return new VisualChangeEventConflater(this);
+// }
+
+ private void disableScrollBar(ScrollBar scrollBar) {
+ scrollBar.setMinimum(0);
+ scrollBar.setMaximum(1);
+ scrollBar.setThumb(1);
+ scrollBar.setEnabled(false);
+ }
+
+// public ILayer getLayer() {
+// return underlyingLayer;
+// }
+//
+// public void setLayer(ILayer layer) {
+// if (autoconfigure) {
+// throw new IllegalStateException("May only set layer post construction if autoconfigure is turned off"); //$NON-NLS-1$
+// }
+//
+// internalSetLayer(layer);
+// }
+//
+// private void internalSetLayer(ILayer layer) {
+// if (layer != null) {
+// this.underlyingLayer = layer;
+// underlyingLayer.setClientAreaProvider(new IClientAreaProvider() {
+//
+// public Rectangle getClientArea() {
+// final Rectangle clientArea = new Rectangle(0, 0, 0, 0);
+// if (!isDisposed()) {
+// getDisplay().syncExec(new Runnable() {
+// public void run() {
+// Rectangle natClientArea = NatTable.this.getClientArea();
+// clientArea.x = natClientArea.x;
+// clientArea.y = natClientArea.y;
+// clientArea.width = natClientArea.width;
+// clientArea.height = natClientArea.height;
+// }
+// });
+// }
+// return clientArea;
+// }
+//
+// });
+// underlyingLayer.addLayerListener(this);
+// }
+// }
+//
+// /**
+// * Adds a configuration to the table.<br/>
+// *
+// * Configurations are processed when the {@link #configure()} method is invoked.<br/>
+// * Each configuration object then has a chance to configure the<br/>
+// * <ol>
+// * <li>ILayer</li>
+// * <li>ConfigRegistry</li>
+// * <li>UiBindingRegistry</li>
+// * </ol>
+// */
+// public void addConfiguration(IConfiguration configuration) {
+// if (autoconfigure) {
+// throw new IllegalStateException("May only add configurations post construction if autoconfigure is turned off"); //$NON-NLS-1$
+// }
+//
+// configurations.add(configuration);
+// }
+//
+// /**
+// * @return {@link IConfigRegistry} used to hold the configuration bindings<br/>
+// * by Layer, DisplayMode and Config labels.
+// */
+// public IConfigRegistry getConfigRegistry() {
+// if (configRegistry == null) {
+// configRegistry = new ConfigRegistry();
+// }
+// return configRegistry;
+// }
+//
+// public void setConfigRegistry(IConfigRegistry configRegistry) {
+// if (autoconfigure) {
+// throw new IllegalStateException("May only set config registry post construction if autoconfigure is turned off"); //$NON-NLS-1$
+// }
+//
+// this.configRegistry = configRegistry;
+// }
+//
+// /**
+// * @return Registry holding all the UIBindings contributed by the underlying layers
+// */
+// public UiBindingRegistry getUiBindingRegistry() {
+// if (uiBindingRegistry == null) {
+// uiBindingRegistry = new UiBindingRegistry(this);
+// }
+// return uiBindingRegistry;
+// }
+//
+// public void setUiBindingRegistry(UiBindingRegistry uiBindingRegistry) {
+// if (autoconfigure) {
+// throw new IllegalStateException("May only set UI binding registry post construction if autoconfigure is turned off"); //$NON-NLS-1$
+// }
+//
+// this.uiBindingRegistry = uiBindingRegistry;
+// }
+//
+// public String getID() {
+// return id;
+// }
+
+ @Override
+ protected void checkSubclass() {
+ }
+
+// protected void initInternalListener() {
+// modeSupport = new ModeSupport(this);
+// modeSupport.registerModeEventHandler(Mode.NORMAL_MODE, new ConfigurableModeEventHandler(modeSupport, this));
+// modeSupport.switchMode(Mode.NORMAL_MODE);
+//
+// addPaintListener(this);
+//
+// addFocusListener(new FocusListener() {
+//
+// public void focusLost(final FocusEvent arg0) {
+// redraw();
+// }
+//
+// public void focusGained(final FocusEvent arg0) {
+// redraw();
+// }
+//
+// });
+//
+// addListener(SWT.Resize, new Listener() {
+// public void handleEvent(final Event e) {
+// doCommand(new ClientAreaResizeCommand(NatTable.this));
+// }
+// });
+// }
+
+ @Override
+ public boolean forceFocus() {
+ return super.forceFocus();
+ }
+
+ // Painting ///////////////////////////////////////////////////////////////
+
+// public List<IOverlayPainter> getOverlayPainters() {
+// return overlayPainters;
+// }
+//
+// public void addOverlayPainter(IOverlayPainter overlayPainter) {
+// overlayPainters.add(overlayPainter);
+// }
+//
+// public void removeOverlayPainter(IOverlayPainter overlayPainter) {
+// overlayPainters.remove(overlayPainter);
+// }
+
+ public void paintControl(final PaintEvent event) {
+ paintNatTable(event);
+ }
+
+ private void paintNatTable(final PaintEvent event) {
+// getLayerPainter().paintLayer(this, event.gc, 0, 0, new Rectangle(event.x, event.y, event.width, event.height), getConfigRegistry());
+ }
+
+// public ILayerPainter getLayerPainter() {
+// return layerPainter;
+// }
+//
+// public void setLayerPainter(ILayerPainter layerPainter) {
+// this.layerPainter = layerPainter;
+// }
+//
+// /**
+// * Repaint only a specific column in the grid. This method is optimized so that only the specific column is
+// * repainted and nothing else.
+// *
+// * @param gridColumnPosition column of the grid to repaint
+// */
+// public void repaintColumn(int columnPosition) {
+// int xOffset = getStartXOfColumnPosition(columnPosition);
+// if (xOffset < 0) {
+// return;
+// }
+// redraw(xOffset, 0, getColumnWidthByPosition(columnPosition), getHeight(), true);
+// }
+//
+// /**
+// * Repaint only a specific row in the grid. This method is optimized so that only the specific row is repainted and
+// * nothing else.
+// *
+// * @param gridRowPosition row of the grid to repaint
+// */
+// public void repaintRow(int rowPosition) {
+// int yOffset = getStartYOfRowPosition(rowPosition);
+// if (yOffset < 0) {
+// return;
+// }
+// redraw(0, yOffset, getWidth(), getRowHeightByPosition(rowPosition), true);
+// }
+
+ public void updateResize() {
+ updateResize(true);
+ }
+
+ /**
+ * Update the table screen by re-calculating everything again. It should not
+ * be called too frequently.
+ *
+ * @param redraw
+ * true to redraw the table
+ */
+ private void updateResize(final boolean redraw) {
+ if (isDisposed()) {
+ return;
+ }
+// doCommand(new RecalculateScrollBarsCommand());
+ if (redraw) {
+ redraw();
+ }
+ }
+
+// /**
+// * Refreshes the entire NatTable as every layer will be refreshed.
+// */
+// public void refresh() {
+// doCommand(new StructuralRefreshCommand());
+// }
+//
+// public void configure(ConfigRegistry configRegistry, UiBindingRegistry uiBindingRegistry) {
+// throw new UnsupportedOperationException("Cannot use this method to configure NatTable. Use no-argument configure() instead."); //$NON-NLS-1$
+// }
+//
+// /**
+// * Processes all the registered {@link IConfiguration} (s).
+// * All the underlying layers are walked and given a chance to configure.
+// * Note: all desired configuration tweaks must be done <i>before</i> this method is invoked.
+// */
+// public void configure() {
+// if (underlyingLayer == null) {
+// throw new IllegalStateException("Layer must be set before configure is called"); //$NON-NLS-1$
+// }
+//
+// if (underlyingLayer != null) {
+// underlyingLayer.configure((ConfigRegistry) getConfigRegistry(), getUiBindingRegistry());
+// }
+//
+// for (IConfiguration configuration : configurations) {
+// configuration.configureLayer(this);
+// configuration.configureRegistry(getConfigRegistry());
+// configuration.configureUiBindings(getUiBindingRegistry());
+// }
+//
+// // Once everything is initialized and properly configured we will
+// // now formally initialize the grid
+// doCommand(new InitializeGridCommand(this));
+// }
+//
+// // Events /////////////////////////////////////////////////////////////////
+//
+// public void handleLayerEvent(ILayerEvent event) {
+// for (ILayerListener layerListener : listeners) {
+// layerListener.handleLayerEvent(event);
+// }
+//
+// if (event instanceof IVisualChangeEvent) {
+// conflaterChain.addEvent(event);
+// }
+//
+// if (event instanceof CellSelectionEvent) {
+// Event e = new Event();
+// e.widget = this;
+// try {
+// notifyListeners(SWT.Selection, e);
+// } catch (RuntimeException re) {
+// re.printStackTrace();
+// }
+// }
+// }
+//
+//
+// // ILayer /////////////////////////////////////////////////////////////////
+//
+// // Persistence
+//
+// /**
+// * Save the state of the table to the properties object.
+// * {@link ILayer#saveState(String, Properties)} is invoked on all the underlying layers.
+// * This properties object will be populated with the settings of all underlying layers
+// * and any {@link IPersistable} registered with those layers.
+// */
+// public void saveState(String prefix, Properties properties) {
+// underlyingLayer.saveState(prefix, properties);
+// }
+//
+// /**
+// * Restore the state of the underlying layers from the values in the properties object.
+// * @see #saveState(String, Properties)
+// */
+// public void loadState(String prefix, Properties properties) {
+// underlyingLayer.loadState(prefix, properties);
+// }
+//
+// /**
+// * @see ILayer#registerPersistable(IPersistable)
+// */
+// public void registerPersistable(IPersistable persistable) {
+// persistables.add(persistable);
+// }
+//
+// public void unregisterPersistable(IPersistable persistable) {
+// persistables.remove(persistable);
+// }
+//
+// // Command
+//
+// public boolean doCommand(ILayerCommand command) {
+// return underlyingLayer.doCommand(command);
+// }
+//
+// // Events
+//
+// private final List<ILayerListener> listeners = new ArrayList<ILayerListener>();
+//
+// public void fireLayerEvent(ILayerEvent event) {
+// underlyingLayer.fireLayerEvent(event);
+// }
+//
+// public void addLayerListener(ILayerListener listener) {
+// listeners.add(listener);
+// }
+//
+// public void removeLayerListener(ILayerListener listener) {
+// listeners.remove(listener);
+// }
+//
+// // Columns
+//
+// public int getColumnCount() {
+// return underlyingLayer.getColumnCount();
+// }
+//
+// public int getPreferredColumnCount() {
+// return underlyingLayer.getPreferredColumnCount();
+// }
+//
+// public int getColumnIndexByPosition(int columnPosition) {
+// return underlyingLayer.getColumnIndexByPosition(columnPosition);
+// }
+//
+// public int localToUnderlyingColumnPosition(int localColumnPosition) {
+// return localColumnPosition;
+// }
+//
+// public int underlyingToLocalColumnPosition(ILayer sourceUnderlyingLayer, int underlyingColumnPosition) {
+// if (sourceUnderlyingLayer != underlyingLayer) {
+// return -1;
+// }
+//
+// return underlyingColumnPosition;
+// }
+//
+// public Collection<Range> underlyingToLocalColumnPositions(ILayer sourceUnderlyingLayer, Collection<Range> underlyingColumnPositionRanges) {
+// if (sourceUnderlyingLayer != underlyingLayer) {
+// return null;
+// }
+//
+// return underlyingColumnPositionRanges;
+// }
+//
+// // Width
+//
+// public int getWidth() {
+// return underlyingLayer.getWidth();
+// }
+//
+// public int getPreferredWidth() {
+// return underlyingLayer.getPreferredWidth();
+// }
+//
+// public int getColumnWidthByPosition(int columnPosition) {
+// return underlyingLayer.getColumnWidthByPosition(columnPosition);
+// }
+//
+// // Column resize
+//
+// public boolean isColumnPositionResizable(int columnPosition) {
+// return underlyingLayer.isColumnPositionResizable(columnPosition);
+// }
+//
+// // X
+//
+// public int getColumnPositionByX(int x) {
+// return underlyingLayer.getColumnPositionByX(x);
+// }
+//
+// public int getStartXOfColumnPosition(int columnPosition) {
+// return underlyingLayer.getStartXOfColumnPosition(columnPosition);
+// }
+//
+// // Underlying
+//
+// public Collection<ILayer> getUnderlyingLayersByColumnPosition(int columnPosition) {
+// Collection<ILayer> underlyingLayers = new HashSet<ILayer>();
+// underlyingLayers.add(underlyingLayer);
+// return underlyingLayers;
+// }
+//
+// // Rows
+//
+// public int getRowCount() {
+// return underlyingLayer.getRowCount();
+// }
+//
+// public int getPreferredRowCount() {
+// return underlyingLayer.getPreferredRowCount();
+// }
+//
+// public int getRowIndexByPosition(int rowPosition) {
+// return underlyingLayer.getRowIndexByPosition(rowPosition);
+// }
+//
+// public int localToUnderlyingRowPosition(int localRowPosition) {
+// return localRowPosition;
+// }
+//
+// public int underlyingToLocalRowPosition(ILayer sourceUnderlyingLayer, int underlyingRowPosition) {
+// if (sourceUnderlyingLayer != underlyingLayer) {
+// return -1;
+// }
+//
+// return underlyingRowPosition;
+// }
+//
+// public Collection<Range> underlyingToLocalRowPositions(ILayer sourceUnderlyingLayer, Collection<Range> underlyingRowPositionRanges) {
+// if (sourceUnderlyingLayer != underlyingLayer) {
+// return null;
+// }
+//
+// return underlyingRowPositionRanges;
+// }
+//
+// // Height
+//
+// public int getHeight() {
+// return underlyingLayer.getHeight();
+// }
+//
+// public int getPreferredHeight() {
+// return underlyingLayer.getPreferredHeight();
+// }
+//
+// public int getRowHeightByPosition(int rowPosition) {
+// return underlyingLayer.getRowHeightByPosition(rowPosition);
+// }
+//
+// // Row resize
+//
+// public boolean isRowPositionResizable(int rowPosition) {
+// return underlyingLayer.isRowPositionResizable(rowPosition);
+// }
+//
+// // Y
+//
+// public int getRowPositionByY(int y) {
+// return underlyingLayer.getRowPositionByY(y);
+// }
+//
+// public int getStartYOfRowPosition(int rowPosition) {
+// return underlyingLayer.getStartYOfRowPosition(rowPosition);
+// }
+//
+// // Underlying
+//
+// public Collection<ILayer> getUnderlyingLayersByRowPosition(int rowPosition) {
+// Collection<ILayer> underlyingLayers = new HashSet<ILayer>();
+// underlyingLayers.add(underlyingLayer);
+// return underlyingLayers;
+// }
+//
+// // Cell features
+//
+// public ILayerCell getCellByPosition(int columnPosition, int rowPosition) {
+// return underlyingLayer.getCellByPosition(columnPosition, rowPosition);
+// }
+//
+// public Rectangle getBoundsByPosition(int columnPosition, int rowPosition) {
+// return underlyingLayer.getBoundsByPosition(columnPosition, rowPosition);
+// }
+//
+// public String getDisplayModeByPosition(int columnPosition, int rowPosition) {
+// return underlyingLayer.getDisplayModeByPosition(columnPosition, rowPosition);
+// }
+//
+// public LabelStack getConfigLabelsByPosition(int columnPosition, int rowPosition) {
+// return underlyingLayer.getConfigLabelsByPosition(columnPosition, rowPosition);
+// }
+//
+// public Object getDataValueByPosition(int columnPosition, int rowPosition) {
+// return underlyingLayer.getDataValueByPosition(columnPosition, rowPosition);
+// }
+//
+// public ICellPainter getCellPainter(int columnPosition, int rowPosition, ILayerCell cell, IConfigRegistry configRegistry) {
+// return underlyingLayer.getCellPainter(columnPosition, rowPosition, cell, configRegistry);
+// }
+//
+// // IRegionResolver
+//
+// public LabelStack getRegionLabelsByXY(int x, int y) {
+// return underlyingLayer.getRegionLabelsByXY(x, y);
+// }
+//
+// public ILayer getUnderlyingLayerByPosition(int columnPosition, int rowPosition) {
+// return underlyingLayer;
+// }
+//
+// public IClientAreaProvider getClientAreaProvider() {
+// return this;
+// }
+//
+// public void setClientAreaProvider(IClientAreaProvider clientAreaProvider) {
+// throw new UnsupportedOperationException("Cannot set an area provider."); //$NON-NLS-1$
+// }
+//
+//
+// // DND /////////////////////////////////////////////////////////////////
+//
+// /**
+// * Adds support for dragging items out of this control via a user
+// * drag-and-drop operation.
+// *
+// * @param operations
+// * a bitwise OR of the supported drag and drop operation types (
+// * <code>DROP_COPY</code>,<code>DROP_LINK</code>, and
+// * <code>DROP_MOVE</code>)
+// * @param transferTypes
+// * the transfer types that are supported by the drag operation
+// * @param listener
+// * the callback that will be invoked to set the drag data and to
+// * cleanup after the drag and drop operation finishes
+// * @see org.eclipse.swt.dnd.DND
+// */
+// public void addDragSupport(final int operations, final Transfer[] transferTypes, final DragSourceListener listener) {
+// final DragSource dragSource = new DragSource(this, operations);
+// dragSource.setTransfer(transferTypes);
+// dragSource.addDragListener(listener);
+// }
+//
+// /**
+// * Adds support for dropping items into this control via a user drag-and-drop
+// * operation.
+// *
+// * @param operations
+// * a bitwise OR of the supported drag and drop operation types (
+// * <code>DROP_COPY</code>,<code>DROP_LINK</code>, and
+// * <code>DROP_MOVE</code>)
+// * @param transferTypes
+// * the transfer types that are supported by the drop operation
+// * @param listener
+// * the callback that will be invoked after the drag and drop
+// * operation finishes
+// * @see org.eclipse.swt.dnd.DND
+// */
+// public void addDropSupport(final int operations, final Transfer[] transferTypes, final DropTargetListener listener) {
+// final DropTarget dropTarget = new DropTarget(this, operations);
+// dropTarget.setTransfer(transferTypes);
+// dropTarget.addDropListener(listener);
+// }
+}