");
+
+
+ if (hideTrigger) {
+ sb.appendHtmlConstant("
");
+ renderInput(sb, value, inputStylesBuilder.toSafeStyles(), options);
+ } else {
+ FieldDetails fieldDetails = getResources().theme().field();
+
+ int rightPadding = fieldDetails.padding().right();
+ sb.appendHtmlConstant("
");
+ renderInput(sb, value, inputStylesBuilder.toSafeStyles(), options);
+
+ int triggerWrapTopMargin = -(getTriggerWrapHeight() / 2);
+
+ sb.appendHtmlConstant("
");
+ sb.appendHtmlConstant("
");
+ sb.appendHtmlConstant("
");
+ sb.appendHtmlConstant("
");
+ }
+
+ sb.appendHtmlConstant("
");
+ }
+
+ @Override
+ protected Css3TwinTriggerFieldStyle getStyle() {
+ return style;
+ }
+
+ protected int getTriggerWrapHeight() {
+ return getResources().triggerArrow().getHeight();
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/Css3ValueBaseField.css b/src/com/sencha/gxt/theme/neptune/client/base/field/Css3ValueBaseField.css
new file mode 100644
index 0000000..c567940
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/field/Css3ValueBaseField.css
@@ -0,0 +1,84 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def backgroundColor value('theme.field.backgroundColor');
+
+@def fieldColor value('theme.field.text.color');
+@def fontSize value('theme.field.text.size');
+@def fontFamily value('theme.field.text.family');
+@def fontWeight value('theme.field.text.weight');
+@def emptyTextColor value('theme.field.emptyTextColor');
+
+@def height value('theme.field.height', 'px');
+@def lineHeight value('theme.field.lineHeight');
+
+@def borderColor value('theme.field.borderColor');
+@def borderWidth value('theme.field.borderWidth', 'px');
+
+@def focusColor value('theme.field.focusBorderColor');
+
+@def invalidBackgroundColor value('theme.field.invalidBackgroundColor');
+@def invalidBorderColor value('theme.field.invalidBorderColor');
+@def invalidBorderWidth value('theme.field.invalidBorderWidth', 'px');
+
+
+.focus {}
+.invalid {}
+
+.focus .wrap {
+ border-color: focusColor;
+}
+
+.invalid .wrap {
+ background-color: invalidBackgroundColor;
+ border: solid invalidBorderColor;
+ border-width: invalidBorderWidth;
+}
+
+.wrap {
+ zoom: 1;
+ white-space: nowrap;
+ text-align: left;
+ width: auto;
+ position: relative;
+ background-color: backgroundColor;
+
+ border-color: borderColor;
+ border-width: borderWidth;
+ border-style: solid;
+ -moz-box-sizing: border-box;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ overflow: hidden;
+}
+
+.field {
+ color: fieldColor;
+ font-size: fontSize;
+ font-family: fontFamily;
+ font-weight: fontWeight;
+
+ border: 0px;
+
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.field::-ms-clear {
+ display: none;
+}
+
+.empty {
+ color: emptyTextColor;
+}
+
+.readonly {}
+
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/Css3ValueBaseFieldAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/field/Css3ValueBaseFieldAppearance.java
new file mode 100644
index 0000000..be40a9d
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/field/Css3ValueBaseFieldAppearance.java
@@ -0,0 +1,72 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.field;
+
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.InputElement;
+import com.google.gwt.resources.client.CssResource;
+import com.sencha.gxt.cell.core.client.form.ValueBaseInputCell.ValueBaseFieldAppearance;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.core.client.resources.StyleInjectorHelper;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.form.Field.FieldStyles;
+
+public abstract class Css3ValueBaseFieldAppearance implements ValueBaseFieldAppearance {
+
+ public interface Css3ValueBaseFieldResources {
+ Css3ValueBaseFieldStyle style();
+
+ ThemeDetails theme();
+ }
+
+ public interface Css3ValueBaseFieldStyle extends CssResource, FieldStyles {
+ @Override
+ String focus();
+
+ @Override
+ String invalid();
+
+ String empty();
+
+ String field();
+
+ String readonly();
+
+ String wrap();
+
+ }
+
+ private final Css3ValueBaseFieldStyle style;
+
+ public Css3ValueBaseFieldAppearance(Css3ValueBaseFieldResources resources) {
+ this.style = resources.style();
+
+ StyleInjectorHelper.ensureInjected(this.style, true);
+ }
+
+ @Override
+ public void onEmpty(Element parent, boolean empty) {
+ getInputElement(parent).setClassName(style.empty(), empty);
+ }
+
+ @Override
+ public void onFocus(Element parent, boolean focus) {
+ parent.
cast().setClassName(style.focus(), focus);
+ }
+
+ @Override
+ public void onValid(Element parent, boolean valid) {
+ parent.cast().setClassName(style.invalid(), !valid);
+ }
+
+ @Override
+ public void setReadOnly(Element parent, boolean readOnly) {
+ getInputElement(parent).cast().setReadOnly(readOnly);
+ getInputElement(parent).setClassName(style.readonly(), readOnly);
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/allLeft.png b/src/com/sencha/gxt/theme/neptune/client/base/field/allLeft.png
new file mode 100644
index 0000000..c58b340
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/allLeft.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/allLeftClick.png b/src/com/sencha/gxt/theme/neptune/client/base/field/allLeftClick.png
new file mode 100644
index 0000000..519d561
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/allLeftClick.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/allLeftOver.png b/src/com/sencha/gxt/theme/neptune/client/base/field/allLeftOver.png
new file mode 100644
index 0000000..3334fc1
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/allLeftOver.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/allRight.png b/src/com/sencha/gxt/theme/neptune/client/base/field/allRight.png
new file mode 100644
index 0000000..330c2eb
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/allRight.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/allRightClick.png b/src/com/sencha/gxt/theme/neptune/client/base/field/allRightClick.png
new file mode 100644
index 0000000..99533e2
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/allRightClick.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/allRightOver.png b/src/com/sencha/gxt/theme/neptune/client/base/field/allRightOver.png
new file mode 100644
index 0000000..58ba00a
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/allRightOver.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/clearTrigger.png b/src/com/sencha/gxt/theme/neptune/client/base/field/clearTrigger.png
new file mode 100644
index 0000000..1fefe0d
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/clearTrigger.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/clearTriggerClick.png b/src/com/sencha/gxt/theme/neptune/client/base/field/clearTriggerClick.png
new file mode 100644
index 0000000..e61340a
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/clearTriggerClick.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/clearTriggerOver.png b/src/com/sencha/gxt/theme/neptune/client/base/field/clearTriggerOver.png
new file mode 100644
index 0000000..d88d7e5
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/clearTriggerOver.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/dateTrigger.png b/src/com/sencha/gxt/theme/neptune/client/base/field/dateTrigger.png
new file mode 100644
index 0000000..354d27f
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/dateTrigger.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/dateTriggerClick.png b/src/com/sencha/gxt/theme/neptune/client/base/field/dateTriggerClick.png
new file mode 100644
index 0000000..bb5f257
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/dateTriggerClick.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/dateTriggerOver.png b/src/com/sencha/gxt/theme/neptune/client/base/field/dateTriggerOver.png
new file mode 100644
index 0000000..428318a
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/dateTriggerOver.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/down.png b/src/com/sencha/gxt/theme/neptune/client/base/field/down.png
new file mode 100644
index 0000000..abd8ce1
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/down.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/downClick.png b/src/com/sencha/gxt/theme/neptune/client/base/field/downClick.png
new file mode 100644
index 0000000..9833452
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/downClick.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/downOver.png b/src/com/sencha/gxt/theme/neptune/client/base/field/downOver.png
new file mode 100644
index 0000000..8e926ab
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/downOver.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/exclamation.png b/src/com/sencha/gxt/theme/neptune/client/base/field/exclamation.png
new file mode 100644
index 0000000..9ed2cc9
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/exclamation.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/exclamationClick.png b/src/com/sencha/gxt/theme/neptune/client/base/field/exclamationClick.png
new file mode 100644
index 0000000..9ed2cc9
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/exclamationClick.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/exclamationOver.png b/src/com/sencha/gxt/theme/neptune/client/base/field/exclamationOver.png
new file mode 100644
index 0000000..9ed2cc9
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/exclamationOver.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/left.png b/src/com/sencha/gxt/theme/neptune/client/base/field/left.png
new file mode 100644
index 0000000..063f774
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/left.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/leftClick.png b/src/com/sencha/gxt/theme/neptune/client/base/field/leftClick.png
new file mode 100644
index 0000000..4614771
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/leftClick.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/leftOver.png b/src/com/sencha/gxt/theme/neptune/client/base/field/leftOver.png
new file mode 100644
index 0000000..0d95297
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/leftOver.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/right.png b/src/com/sencha/gxt/theme/neptune/client/base/field/right.png
new file mode 100644
index 0000000..b615463
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/right.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/rightClick.png b/src/com/sencha/gxt/theme/neptune/client/base/field/rightClick.png
new file mode 100644
index 0000000..43f6594
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/rightClick.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/rightOver.png b/src/com/sencha/gxt/theme/neptune/client/base/field/rightOver.png
new file mode 100644
index 0000000..c933c51
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/rightOver.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/spinnerDown.png b/src/com/sencha/gxt/theme/neptune/client/base/field/spinnerDown.png
new file mode 100644
index 0000000..46d6aae
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/spinnerDown.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/spinnerDownClick.png b/src/com/sencha/gxt/theme/neptune/client/base/field/spinnerDownClick.png
new file mode 100644
index 0000000..5af6916
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/spinnerDownClick.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/spinnerDownOver.png b/src/com/sencha/gxt/theme/neptune/client/base/field/spinnerDownOver.png
new file mode 100644
index 0000000..1e9c014
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/spinnerDownOver.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/spinnerUp.png b/src/com/sencha/gxt/theme/neptune/client/base/field/spinnerUp.png
new file mode 100644
index 0000000..c0e0929
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/spinnerUp.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/spinnerUpClick.png b/src/com/sencha/gxt/theme/neptune/client/base/field/spinnerUpClick.png
new file mode 100644
index 0000000..aaefa63
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/spinnerUpClick.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/spinnerUpOver.png b/src/com/sencha/gxt/theme/neptune/client/base/field/spinnerUpOver.png
new file mode 100644
index 0000000..927191f
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/spinnerUpOver.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/triggerArrow.png b/src/com/sencha/gxt/theme/neptune/client/base/field/triggerArrow.png
new file mode 100644
index 0000000..23d15a0
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/triggerArrow.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/triggerArrowClick.png b/src/com/sencha/gxt/theme/neptune/client/base/field/triggerArrowClick.png
new file mode 100644
index 0000000..b08a441
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/triggerArrowClick.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/triggerArrowOver.png b/src/com/sencha/gxt/theme/neptune/client/base/field/triggerArrowOver.png
new file mode 100644
index 0000000..8cb0174
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/triggerArrowOver.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/up.png b/src/com/sencha/gxt/theme/neptune/client/base/field/up.png
new file mode 100644
index 0000000..e17f146
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/up.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/upClick.png b/src/com/sencha/gxt/theme/neptune/client/base/field/upClick.png
new file mode 100644
index 0000000..fa773de
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/upClick.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/field/upOver.png b/src/com/sencha/gxt/theme/neptune/client/base/field/upOver.png
new file mode 100644
index 0000000..2d1cc51
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/field/upOver.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/fieldset/Css3FieldSet.css b/src/com/sencha/gxt/theme/neptune/client/base/fieldset/Css3FieldSet.css
new file mode 100644
index 0000000..58f9d01
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/fieldset/Css3FieldSet.css
@@ -0,0 +1,29 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def textSize value('theme.fieldset.text.size');
+@def textColor value('theme.fieldset.text.color');
+@def textFamily value('theme.fieldset.text.family');
+@def textWeight value('theme.fieldset.text.weight');
+
+@def borderWidth value('theme.fieldset.border.toString');
+@def borderColor value('theme.fieldset.border.color');
+@def borderStyle value('theme.fieldset.border.style');
+
+
+.fieldSet {
+ border-color: borderColor;
+ border-style: borderStyle;
+ border-width: borderwidth;
+}
+
+.fieldSet legend {
+ font-size: textSize;
+ font-family: textFamily;
+ font-weight: textWeight;
+ color: textColor;
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/fieldset/Css3FieldSetAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/fieldset/Css3FieldSetAppearance.java
new file mode 100644
index 0000000..afe9e8c
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/fieldset/Css3FieldSetAppearance.java
@@ -0,0 +1,33 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.fieldset;
+
+import com.google.gwt.core.shared.GWT;
+import com.sencha.gxt.theme.base.client.field.FieldSetDefaultAppearance;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+
+public class Css3FieldSetAppearance extends FieldSetDefaultAppearance {
+ public interface Css3FieldSetResources extends FieldSetResources {
+ @Source({"com/sencha/gxt/theme/base/client/field/FieldSet.css", "Css3FieldSet.css"})
+ @Override
+ Css3FieldSetStyle css();
+
+ ThemeDetails theme();
+ }
+ public interface Css3FieldSetStyle extends FieldSetStyle {
+
+ }
+
+ public Css3FieldSetAppearance() {
+ this(GWT.create(Css3FieldSetResources.class));
+ }
+
+ public Css3FieldSetAppearance(Css3FieldSetResources resources) {
+ super(resources);
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3CheckBoxColumn.css b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3CheckBoxColumn.css
new file mode 100644
index 0000000..c741f5b
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3CheckBoxColumn.css
@@ -0,0 +1,51 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def specialColumnGradient value('theme.grid.specialColumnGradient');
+@def specialColumnGradientSelected value('theme.grid.specialColumnGradientSelected');
+
+.cell {
+ padding: 2px 0px 0px 2px !important;
+}
+
+.cellInner {
+ padding: 4px 0px 0px 0px !important;
+}
+
+.grid-row .cell {
+ vertical-align: top;
+ background: -webkit-linear-gradient(top, specialColumnGradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, specialColumnGradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, specialColumnGradient); /* IE10+ */
+ background: linear-gradient(to bottom, specialColumnGradient); /* W3C */
+}
+
+.grid-rowSelected .cell {
+ background: -webkit-linear-gradient(top, specialColumnGradientSelected); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, specialColumnGradientSelected); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, specialColumnGradientSelected); /* IE10+ */
+ background: linear-gradient(to bottom, specialColumnGradientSelected); /* W3C */
+}
+
+@sprite .rowChecker, .hdChecker {
+ gwt-image: 'unchecked';
+ height: 18px;
+}
+
+@sprite .grid-rowSelected .rowChecker, .headerChecked .hdChecker {
+ gwt-image: 'checked';
+ height: 18px;
+}
+
+.rowChecker, .hdChecker {
+ background-repeat: no-repeat;
+ background-color: transparent;
+}
+
+.hdChecker {
+ padding-bottom: 0px !important;
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3CheckBoxColumnAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3CheckBoxColumnAppearance.java
new file mode 100644
index 0000000..1aff76f
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3CheckBoxColumnAppearance.java
@@ -0,0 +1,117 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.grid;
+
+import com.google.gwt.cell.client.Cell.Context;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.resources.client.CssResource.Import;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.core.client.XTemplates;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.core.client.resources.StyleInjectorHelper;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.grid.CheckBoxSelectionModel.CheckBoxColumnAppearance;
+import com.sencha.gxt.widget.core.client.grid.ColumnHeader.ColumnHeaderStyles;
+import com.sencha.gxt.widget.core.client.grid.GridView.GridStateStyles;
+
+public class Css3CheckBoxColumnAppearance implements CheckBoxColumnAppearance {
+
+ public interface CheckBoxColumnStyle extends CssResource {
+ String headerChecked();
+
+ String hdChecker();
+
+ String cell();
+
+ String cellInner();
+
+ String rowChecker();
+ }
+
+ public interface CheckBoxColumnResources extends ClientBundle {
+ @Source("Css3CheckBoxColumn.css")
+ @Import({GridStateStyles.class, ColumnHeaderStyles.class})
+ CheckBoxColumnStyle style();
+
+ //to be placed in sliced impl after sliced job is created
+// @ImageOptions(repeatStyle = RepeatStyle.Vertical)
+// ImageResource specialColumn();
+//
+// @ImageOptions(repeatStyle = RepeatStyle.Vertical)
+// ImageResource specialColumnSelected();
+
+ ImageResource checked();
+
+ ImageResource unchecked();
+
+ ThemeDetails theme();
+ }
+
+ public interface CheckBoxColumnTemplates extends XTemplates {
+ @XTemplate("
")
+ SafeHtml renderCell(CheckBoxColumnStyle style);
+
+ @XTemplate("")
+ SafeHtml renderHeader(CheckBoxColumnStyle style);
+ }
+
+ private final CheckBoxColumnResources resources;
+ private final CheckBoxColumnStyle style;
+ private final CheckBoxColumnTemplates template;
+
+ public Css3CheckBoxColumnAppearance() {
+ this(GWT. create(CheckBoxColumnResources.class), GWT.create(CheckBoxColumnTemplates.class));
+ }
+
+ public Css3CheckBoxColumnAppearance(CheckBoxColumnResources resources, CheckBoxColumnTemplates template) {
+ this.resources = resources;
+ this.style = this.resources.style();
+ this.template = template;
+
+ StyleInjectorHelper.ensureInjected(style, true);
+ }
+
+ @Override
+ public String getCellClassName() {
+ return style.cell();
+ }
+
+ @Override
+ public void renderCellCheckBox(Context context, Object value, SafeHtmlBuilder sb) {
+ sb.append(template.renderCell(style));
+ }
+
+ @Override
+ public SafeHtml renderHeadCheckBox() {
+ return template.renderHeader(style);
+ }
+
+ @Override
+ public void onHeaderChecked(XElement header, boolean checked) {
+ header.setClassName(style.headerChecked(), checked);
+ }
+
+ @Override
+ public boolean isHeaderChecked(XElement header) {
+ return header.findParent("." + style.headerChecked(), 3) != null;
+ }
+
+ @Override
+ public boolean isRowChecker(XElement target) {
+ return target.is("." + style.rowChecker());
+ }
+
+ @Override
+ public String getCellInnerClassName() {
+ return style.cellInner();
+ }
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3ColumnHeader.css b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3ColumnHeader.css
new file mode 100644
index 0000000..3e512e5
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3ColumnHeader.css
@@ -0,0 +1,179 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def fontFamily value('theme.grid.columnHeader.text.family');
+@def fontSize value('theme.grid.columnHeader.text.size');
+@def textColor value('theme.grid.columnHeader.text.color');
+@def fontWeight value('theme.grid.columnHeader.text.weight');
+
+@def lineHeight value('theme.grid.columnHeader.lineHeight');
+
+@def padding value('theme.grid.columnHeader.padding');
+
+@def gradient value('theme.grid.columnHeader.gradient');
+@def overGradient value('theme.grid.columnHeader.overGradient');
+
+@def borderWidth value('theme.grid.columnHeader.borderWidth', 'px');
+@def borderColor value('theme.grid.columnHeader.borderColor');
+@def borderStyle value('theme.grid.columnHeader.borderStyle');
+
+@def menuWidth value('theme.grid.columnHeader.menuButtonWidth', 'px');
+
+@def menuGradient value('theme.grid.columnHeader.menuGradient');
+@def menuBorderWidth value('theme.grid.columnHeader.menuBorder.toString');
+@def menuBorderStyle value('theme.grid.columnHeader.menuBorder.style');
+@def menuBorderColor value('theme.grid.columnHeader.menuBorder.color');
+
+@def menuHoverGradient value('theme.grid.columnHeader.menuHoverGradient');
+@def menuHoverBorderWidth value('theme.grid.columnHeader.menuHoverBorder.toString');
+@def menuHoverBorderStyle value('theme.grid.columnHeader.menuHoverBorder.style');
+@def menuHoverBorderColor value('theme.grid.columnHeader.menuHoverBorder.color');
+
+@def menuActiveGradient value('theme.grid.columnHeader.menuActiveGradient');
+@def menuActiveBorderWidth value('theme.grid.columnHeader.menuActiveBorder.toString');
+@def menuActiveBorderStyle value('theme.grid.columnHeader.menuActiveBorder.style');
+@def menuActiveBorderColor value('theme.grid.columnHeader.menuActiveBorder.color');
+
+.headerInner {}
+.header {
+ cursor: default;
+ padding: 0px 0 0 0;
+
+ overflow:hidden;
+
+ background: -webkit-linear-gradient(top, gradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, gradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, gradient); /* IE10+ */
+ background: linear-gradient(to bottom, gradient); /* W3C */
+
+ border-style: borderStyle;
+ border-width: borderWidth 0 0;
+ border-color: borderColor;
+}
+
+.headRow .head {
+ line-height: lineHeight;
+ vertical-align: top;
+
+ -moz-outline: none;
+ -moz-user-focus: normal;
+ outline: 0 none;
+
+ font-family: fontFamily;
+ font-size: fontSize;
+ font-weight: fontWeight;
+ color: textColor;
+
+ border-style: borderStyle;
+ border-color: borderColor;
+ border-width: 0 borderWidth borderWidth 0;
+}
+
+.headInner {
+ overflow: hidden;
+ zoom: 1;
+ padding: padding;
+
+ cursor: inherit;
+ position: relative;
+ vertical-align: middle;
+ overflow: hidden;
+ -o-text-overflow: ellipsis;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.head {
+ -moz-user-select: none;
+ -khtml-user-select: none;
+ -webkit-user-select: ignore;
+}
+
+.headButton {
+ background: literal('url(')value('columnHeaderBtn.getSafeUri.asString',')') no-repeat center center, -webkit-linear-gradient(top, menuGradient); /* Chrome10+,Safari5.1+ */
+ background: literal('url(')value('columnHeaderBtn.getSafeUri.asString',')') no-repeat center center, -o-linear-gradient(top, menuGradient); /* Opera 11.10+ */
+ background: literal('url(')value('columnHeaderBtn.getSafeUri.asString',')') no-repeat center center, -ms-linear-gradient(top, menuGradient); /* IE10+ */
+ background: literal('url(')value('columnHeaderBtn.getSafeUri.asString',')') no-repeat center center, linear-gradient(to bottom, menuGradient); /* W3C */
+
+ border-width: menuBorderWidth;
+ border-style: menuBorderStyle;
+ border-color: menuBorderColor;
+
+ background-position: center center;
+
+ display: none;
+ position: absolute;
+ width: menuWidth;
+ right: 0;
+ top: 0;
+ z-index: 2;
+ cursor: pointer;
+ outline: none;
+}
+
+.headOver .headButton,.headMenuOpen .headButton {
+ display: block;
+}
+
+.headOver .headButton {
+ background: literal('url(')value('columnHeaderBtn.getSafeUri.asString',')') no-repeat center center, -webkit-linear-gradient(top, menuHoverGradient); /* Chrome10+,Safari5.1+ */
+ background: literal('url(')value('columnHeaderBtn.getSafeUri.asString',')') no-repeat center center, -o-linear-gradient(top, menuHoverGradient); /* Opera 11.10+ */
+ background: literal('url(')value('columnHeaderBtn.getSafeUri.asString',')') no-repeat center center, -ms-linear-gradient(top, menuHoverGradient); /* IE10+ */
+ background: literal('url(')value('columnHeaderBtn.getSafeUri.asString',')') no-repeat center center, linear-gradient(to bottom, menuHoverGradient); /* W3C */
+
+ border-width: menuHoverBorderWidth;
+ border-style: menuHoverBorderStyle;
+ border-color: menuHoverBorderColor;
+}
+
+.headMenuOpen .headButton {
+ background: literal('url(')value('columnHeaderBtn.getSafeUri.asString',')') no-repeat center center, -webkit-linear-gradient(top, menuActiveGradient); /* Chrome10+,Safari5.1+ */
+ background: literal('url(')value('columnHeaderBtn.getSafeUri.asString',')') no-repeat center center, -o-linear-gradient(top, menuActiveGradient); /* Opera 11.10+ */
+ background: literal('url(')value('columnHeaderBtn.getSafeUri.asString',')') no-repeat center center, -ms-linear-gradient(top, menuActiveGradient); /* IE10+ */
+ background: literal('url(')value('columnHeaderBtn.getSafeUri.asString',')') no-repeat center center, linear-gradient(to bottom, menuActiveGradient); /* W3C */
+
+ border-width: menuActiveBorderWidth;
+ border-style: menuActiveBorderStyle;
+ border-color: menuActiveBorderColor;
+}
+
+.headOver .headInner, .headMenuOpen .headInner {
+ background: -webkit-linear-gradient(top, overGradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, overGradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, overGradient); /* IE10+ */
+ background: linear-gradient(to bottom, overGradient); /* W3C */
+}
+
+@eval max com.sencha.gxt.themebuilder.base.client.CssResourceThemeUtils.maxPxSize(sortAscHeaderIcon().getHeight(),sortDescHeaderIcon().getHeight());
+
+.sortIcon {
+ background-repeat: no-repeat;
+ display: none;
+ height: max;
+ margin-left: 3px;
+ vertical-align: middle;
+}
+
+.sortAsc .sortIcon, .sortDesc .sortIcon {
+ display: inline;
+}
+
+@sprite .sortAsc .sortIcon {
+ gwt-image: 'sortAscHeaderIcon';
+}
+
+@sprite .sortDesc .sortIcon {
+ gwt-image: 'sortDescHeaderIcon';
+}
+
+@sprite .columnMoveTop {
+ gwt-image: 'columnMoveTop';
+}
+
+@sprite .columnMoveBottom {
+ gwt-image: 'columnMoveBottom';
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3ColumnHeader.html b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3ColumnHeader.html
new file mode 100644
index 0000000..baad517
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3ColumnHeader.html
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3ColumnHeaderAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3ColumnHeaderAppearance.java
new file mode 100644
index 0000000..3c3b882
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3ColumnHeaderAppearance.java
@@ -0,0 +1,116 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.grid;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.resources.client.ImageResource.ImageOptions;
+import com.google.gwt.resources.client.ImageResource.RepeatStyle;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.core.client.XTemplates;
+import com.sencha.gxt.core.client.resources.StyleInjectorHelper;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.grid.ColumnHeader.ColumnHeaderAppearance;
+import com.sencha.gxt.widget.core.client.grid.ColumnHeader.ColumnHeaderStyles;
+
+public class Css3ColumnHeaderAppearance implements ColumnHeaderAppearance {
+
+ public interface Css3ColumnHeaderResources extends ClientBundle {
+ /** column header menu button visible on mouseover */
+ @ImageOptions(repeatStyle = RepeatStyle.None)
+ ImageResource columnHeaderBtn();
+
+ /** Menu icon */
+ ImageResource columnsIcon();
+
+ /** grid header marker */
+ ImageResource sortAscHeaderIcon();
+
+ /** grid header marker */
+ ImageResource sortDescHeaderIcon();
+
+ /** Menu icon */
+ ImageResource sortAscendingIcon();
+
+ /** Menu icon */
+ ImageResource sortDescendingIcon();
+
+ /** Column dnd indicator 1 */
+ ImageResource columnMoveTop();
+
+ /** Column dnd indicator 2 */
+ ImageResource columnMoveBottom();
+
+ @Source("Css3ColumnHeader.css")
+ Styles style();
+
+ ThemeDetails theme();
+
+ }
+
+ public interface Styles extends ColumnHeaderStyles {
+
+ }
+
+ public interface ColumnHeaderTemplate extends XTemplates {
+ @XTemplate(source = "Css3ColumnHeader.html")
+ SafeHtml render(ColumnHeaderStyles style);
+ }
+
+ private final Css3ColumnHeaderResources resources;
+ private final ColumnHeaderStyles style;
+ private ColumnHeaderTemplate templates = GWT.create(ColumnHeaderTemplate.class);
+
+ public Css3ColumnHeaderAppearance() {
+ this(GWT. create(Css3ColumnHeaderResources.class));
+ }
+
+ public Css3ColumnHeaderAppearance(Css3ColumnHeaderResources resources) {
+ this.resources = resources;
+ this.style = this.resources.style();
+
+ StyleInjectorHelper.ensureInjected(style, true);
+ }
+
+ @Override
+ public ImageResource columnsIcon() {
+ return resources.columnsIcon();
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder sb) {
+ sb.append(templates.render(style));
+ }
+
+ @Override
+ public ImageResource sortAscendingIcon() {
+ return resources.sortAscendingIcon();
+ }
+
+ @Override
+ public ImageResource sortDescendingIcon() {
+ return resources.sortDescendingIcon();
+ }
+
+ @Override
+ public ColumnHeaderStyles styles() {
+ return style;
+ }
+
+ @Override
+ public String columnsWrapSelector() {
+ return "." + style.headerInner();
+ }
+
+ @Override
+ public int getColumnMenuWidth() {
+ return resources.theme().grid().columnHeader().menuButtonWidth();
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3Grid.css b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3Grid.css
new file mode 100644
index 0000000..03b1a15
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3Grid.css
@@ -0,0 +1,189 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def cellPadding value('theme.grid.cellPadding');
+
+@def cellFamily value('theme.grid.cellText.family');
+@def cellWeight value('theme.grid.cellText.weight');
+@def cellSize value('theme.grid.cellText.size');
+@def cellColor value('theme.grid.cellText.color');
+
+@def cellLineHeight value('theme.grid.cellLineHeight');
+
+@def cellVBorderColor value('theme.grid.cellVBorderColor');
+@def cellHBorderColor value('theme.grid.cellHBorderColor');
+@def cellBorderWidth value('theme.grid.cellBorderWidth', 'px');
+@def cellBackgroundColor value('theme.grid.cellBackgroundColor');
+@def cellAltBackgroundColor value('theme.grid.cellAltBackgroundColor');
+
+@def cellOverVBorderColor value('theme.grid.cellOverVBorderColor');
+@def cellOverVBorderStyle value('theme.grid.cellOverVBorderStyle');
+
+@def cellOverHBorderColor value('theme.grid.cellOverHBorderColor');
+@def cellOverHBorderStyle value('theme.grid.cellOverHBorderStyle');
+
+@def cellOverBackgroundColor value('theme.grid.cellOverBackgroundColor');
+
+@def cellSelectedVBorderColor value('theme.grid.cellSelectedVBorderColor');
+@def cellSelectedVBorderStyle value('theme.grid.cellSelectedVBorderStyle');
+
+@def cellSelectedHBorderColor value('theme.grid.cellSelectedHBorderColor');
+@def cellSelectedHBorderStyle value('theme.grid.cellSelectedHBorderStyle');
+
+@def cellSelectedBackgroundColor value('theme.grid.cellSelectedBackgroundColor');
+
+@def footerTextFamily value('theme.grid.footer.text.family');
+@def footerTextWeight value('theme.grid.footer.text.weight');
+@def footerTextSize value('theme.grid.footer.text.size');
+@def footerTextColor value('theme.grid.footer.text.color');
+
+@def footerBackgroundColor value('theme.grid.footer.backgroundColor');
+@def footerBorderWidth value('theme.grid.footer.cellBorder.toString');
+@def footerBorderColor value('theme.grid.footer.cellBorder.color');
+@def footerBorderStyle value('theme.grid.footer.cellBorder.style');
+
+@eval dirty com.sencha.gxt.core.client.util.ImageHelper.createModuleBasedUrl("base/images/grid/dirty.gif");
+@eval invalidLine com.sencha.gxt.core.client.util.ImageHelper.createModuleBasedUrl("base/images/grid/invalid_line.gif");
+
+@external x-treegrid x-treegrid-column;
+
+.grid {
+ position: relative;
+ overflow: hidden;
+ outline: 0 none;
+}
+
+.scroller {
+ overflow: auto;
+ zoom: 1;
+ position: relative;
+ background-color: white;
+}
+
+.body {
+}
+.rowHighlight {
+}
+
+.dataTable {
+ table-layout: fixed;
+ border-collapse: separate;
+ border-spacing: 0;
+}
+
+.headerRow {}
+
+.row {
+ cursor: default;
+ padding: 0 1px;
+ vertical-align: top;
+}
+
+.cell {
+ background-color: cellBackgroundColor;
+ border-color: cellBackgroundColor cellVBorderColor cellHBorderColor;
+ border-style: solid;
+ border-width: cellBorderWidth 0;
+ border-right-style: none;
+ font-family: cellFamily;
+ font-size: cellSize;
+ color: cellColor;
+ font-weight: cellWeight;
+ overflow: hidden;
+}
+
+.rowAlt .cell {
+ background-color: cellAltBackgroundColor;
+ border-top-color: cellAltBackgroundColor;
+}
+
+.rowWrap {
+ border-color: cellBackgroundColor cellVBorderColor cellHBorderColor;
+ border-style: solid;
+ border-right-style: none;
+ border-width: cellBorderWidth 0;
+ overflow: hidden;
+}
+.rowAlt .rowWrap {
+ border-top-color: cellAltBackgroundColor;
+}
+
+.rowWrap .cell, .rowWrap .cellInner {
+ border-style: none;
+}
+
+.rowOver .cell, .rowOver .rowWrap {
+ background-color: cellOverBackgroundColor;
+ border-style: solid cellOverVBorderStyle cellOverHBorderStyle;
+ border-color: cellOverBackgroundColor cellOverVBorderColor cellOverHBorderColor;
+}
+
+.grid-rowSelected .cell, .grid-rowSelected .rowWrap, .row .grid-cellSelected {
+ background-color: cellSelectedBackgroundColor !important;
+ border-style: solid cellSelectedVBorderStyle cellSelectedHBorderStyle;
+ border-color: cellSelectedBackgroundColor cellSelectedVBorderColor cellSelectedHBorderColor;
+}
+
+.columnLines .cell {
+ border-right: cellBorderWidth solid cellVBorderColor;
+}
+
+.rowDirty {
+
+}
+
+.cellDirty {
+ background: transparent no-repeat 0 0;
+ background-image: dirty;
+}
+
+.cellInner {
+ overflow: hidden;
+ padding: cellPadding;
+ line-height: cellLineHeight;
+ white-space: nowrap;
+ -o-text-overflow: ellipsis;
+ text-overflow: ellipsis;
+}
+
+.noPadding/*.cellInner*/ {
+ padding: 0;
+ height: 100%;
+}
+
+.empty {
+ padding: 10px;
+ color: gray;
+ font: normal 11px tahoma, arial, helvetica, sans-serif;
+}
+
+.rowBody {
+ font: 11px/13px tahoma,arial,verdana,sans-serif;
+ padding: 4px;
+}
+
+.footer {
+ background: footerBackgroundColor none repeat scroll 0 0;
+ border-width: footerBorderWidth;
+ border-style: footerBorderStyle;
+ border-color: footerBorderColor;
+ display: block;
+ overflow: hidden;
+ position: relative;
+}
+
+.footer .cell {
+ background: none;
+ font-family: footerTextFamily;
+ font-size: footerTextSize;
+ font-weight: footerTextWeight;
+ color: footerTextColor;
+}
+
+.x-treegrid .x-treegrid-column .cellInner {
+ padding: 0 !important;
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3GridAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3GridAppearance.java
new file mode 100644
index 0000000..2b2a263
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3GridAppearance.java
@@ -0,0 +1,123 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.grid;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.NodeList;
+import com.google.gwt.dom.client.TableElement;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource.Import;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.google.gwt.safehtml.shared.SafeHtmlUtils;
+import com.sencha.gxt.core.client.XTemplates;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.core.client.resources.StyleInjectorHelper;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.grid.GridView.GridAppearance;
+import com.sencha.gxt.widget.core.client.grid.GridView.GridStateStyles;
+import com.sencha.gxt.widget.core.client.grid.GridView.GridStyles;
+
+public class Css3GridAppearance implements GridAppearance {
+
+ public interface GridResources extends ClientBundle {
+
+ @Source("Css3Grid.css")
+ @Import(GridStateStyles.class)
+ GridStyle css();
+
+ ThemeDetails theme();
+ }
+
+ public interface GridStyle extends GridStyles {
+ String scroller();
+
+ String body();
+ }
+
+ public interface GridTemplates extends XTemplates {
+ @XTemplate(source = "Grid.html")
+ SafeHtml render(GridStyle style);
+ }
+
+ protected final GridResources resources;
+ protected final GridStyle style;
+ private GridTemplates templates = GWT.create(GridTemplates.class);
+
+ public Css3GridAppearance() {
+ this(GWT.create(GridResources.class));
+ }
+ public Css3GridAppearance(GridResources resources) {
+ this.resources = resources;
+ this.style = this.resources.css();
+
+ StyleInjectorHelper.ensureInjected(style, true);
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder sb) {
+ sb.append(templates.render(style));
+ }
+
+ @Override
+ public GridStyles styles() {
+ return style;
+ }
+
+ @Override
+ public Element findRow(Element elem) {
+ if (Element.is(elem)) {
+ return elem. cast().findParentElement("." + style.row(), -1);
+ }
+ return null;
+ }
+
+ @Override
+ public NodeList getRows(XElement parent) {
+ return TableElement.as(parent.getFirstChildElement()).getTBodies().getItem(1).getRows().cast();
+ }
+
+ @Override
+ public Element findCell(Element elem) {
+ if (Element.is(elem)) {
+ return elem. cast().findParentElement("." + style.cell(), -1);
+ }
+ return null;
+ }
+
+ @Override
+ public void onRowOver(Element row, boolean over) {
+ row. cast().setClassName(style.rowOver(), over);
+ }
+
+ @Override
+ public void onRowHighlight(Element row, boolean highlight) {
+ row. cast().setClassName(style.rowHighlight(), highlight);
+ }
+
+ @Override
+ public void onRowSelect(Element row, boolean select) {
+ }
+
+ @Override
+ public void onCellSelect(Element cell, boolean select) {
+ }
+
+ @Override
+ public Element getRowBody(Element row) {
+ return TableElement.as(row.getFirstChildElement().getFirstChildElement().getFirstChildElement()).getTBodies().getItem(
+ 1).getRows().getItem(1).getCells().getItem(0).getFirstChildElement();
+ }
+
+ @Override
+ public SafeHtml renderEmptyContent(String emptyText) {
+ return SafeHtmlUtils.fromTrustedString(emptyText);
+ }
+
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3GroupSummaryView.css b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3GroupSummaryView.css
new file mode 100644
index 0000000..1d4d246
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3GroupSummaryView.css
@@ -0,0 +1,28 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def summaryTextFamily value('theme.grid.group.summary.text.family');
+@def summaryTextSize value('theme.grid.group.summary.text.size');
+@def summaryTextWeight value('theme.grid.group.summary.text.weight');
+@def summaryTextColor value('theme.grid.group.summary.text.color');
+
+@def summaryBgColor value('theme.grid.group.summary.backgroundColor');
+
+.hideSummaries .summaryRow {
+ display:none;
+}
+
+.summaryRow .grid-cell {
+ background-color: summaryBgColor;
+}
+
+.summaryRow .grid-cellInner {
+ font-family: summaryTextFamily;
+ font-size: summaryTextSize;
+ font-weight: summaryTextWeight;
+ color: summaryTextColor;
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3GroupSummaryViewAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3GroupSummaryViewAppearance.java
new file mode 100644
index 0000000..7435ab8
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3GroupSummaryViewAppearance.java
@@ -0,0 +1,55 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.grid;
+
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.NodeList;
+import com.google.gwt.resources.client.CssResource.Import;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.widget.core.client.grid.GridView.GridStateStyles;
+import com.sencha.gxt.widget.core.client.grid.GroupSummaryView.GroupSummaryViewAppearance;
+import com.sencha.gxt.widget.core.client.grid.GroupSummaryView.GroupSummaryViewStyle;
+
+public class Css3GroupSummaryViewAppearance extends Css3GroupingViewAppearance implements GroupSummaryViewAppearance {
+
+ public interface Css3GroupSummaryResources extends Css3GroupingViewResources {
+ @Override
+ @Import(GridStateStyles.class)
+ @Source({"Css3GroupingView.css", "Css3GroupSummaryView.css"})
+ Css3GroupSummaryStyles style();
+ }
+
+ public interface Css3GroupSummaryStyles extends Css3GroupingViewStyle, GroupSummaryViewStyle {
+ String hideSummaries();
+ }
+
+ public Css3GroupSummaryViewAppearance() {
+ super(GWT.create(Css3GroupSummaryResources.class));
+ }
+
+ @Override
+ public void toggleSummaries(XElement parent, boolean visible) {
+ parent.setClassName(style().hideSummaries(), !visible);
+ }
+
+ @Override
+ public NodeList getSummaries(XElement table) {
+ return table.select("." + style().summaryRow());
+ }
+
+ @Override
+ public int getGroupIndex(XElement group) {
+ return group.getParentElement().cast().indexOf(group) / 3;
+ }
+
+ @Override
+ public Css3GroupSummaryStyles style() {
+ return (Css3GroupSummaryStyles) super.style();
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3GroupingView.css b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3GroupingView.css
new file mode 100644
index 0000000..df31556
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3GroupingView.css
@@ -0,0 +1,56 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def borderWidth value('theme.grid.group.border.toString');
+@def borderColor value('theme.grid.group.border.color');
+@def borderStyle value('theme.grid.group.border.style');
+
+@def backgroundColor value('theme.grid.group.backgroundColor');
+
+@def textFamily value('theme.grid.group.text.family');
+@def textSize value('theme.grid.group.text.size');
+@def textWeight value('theme.grid.group.text.weight');
+@def textColor value('theme.grid.group.text.color');
+
+@def padding value('theme.grid.group.padding.toString');
+
+@def iconSpacing value('theme.grid.group.iconSpacing', 'px');
+
+.group .groupHead {
+ cursor: pointer;
+ padding: padding;
+
+ background-color: backgroundColor;
+
+ border-color: borderColor;
+ border-width: borderWidth;
+ border-style: borderStyle;
+}
+
+.bodyCollapsed {
+ display: none;
+}
+
+@sprite .group .grid-cell .grid-cellInner {
+ gwt-image: 'collapse';
+ width: auto;
+ height: auto;
+ background-position: left center;
+ padding-left: iconSpacing;
+
+ font-family: textFamily;
+ font-size: textSize;
+ font-weight: textWeight;
+ color: textColor;
+}
+
+@sprite .groupCollapsed .grid-cell .grid-cellInner {
+ gwt-image: 'expand';
+ width: auto;
+ height: auto;
+ background-position: left center;
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3GroupingViewAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3GroupingViewAppearance.java
new file mode 100644
index 0000000..548427b
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3GroupingViewAppearance.java
@@ -0,0 +1,47 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.grid;
+
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.resources.client.CssResource.Import;
+import com.google.gwt.resources.client.ImageResource;
+import com.sencha.gxt.theme.base.client.grid.GroupingViewDefaultAppearance;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.grid.GridView.GridStateStyles;
+
+public class Css3GroupingViewAppearance extends GroupingViewDefaultAppearance {
+
+ public interface Css3GroupingViewResources extends GroupingViewResources {
+
+ @Override
+ ImageResource groupBy();
+
+ ImageResource expand();
+
+ ImageResource collapse();
+
+ @Override
+ @Import(GridStateStyles.class)
+ @Source("Css3GroupingView.css")
+ Css3GroupingViewStyle style();
+
+ ThemeDetails theme();
+ }
+
+ public interface Css3GroupingViewStyle extends GroupingViewStyle {
+
+ }
+
+ public Css3GroupingViewAppearance() {
+ this(GWT.create(Css3GroupingViewResources.class));
+ }
+
+ public Css3GroupingViewAppearance(Css3GroupingViewResources resources) {
+ super(resources);
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3RowEditor.css b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3RowEditor.css
new file mode 100644
index 0000000..198daa4
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3RowEditor.css
@@ -0,0 +1,49 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@external x-toolbar;
+
+@def borderStyle value('theme.grid.rowEditor.border.style');
+@def borderColor value('theme.grid.rowEditor.border.color');
+@def borderWidth value('theme.grid.rowEditor.border');
+@def backgroundColor value('theme.grid.rowEditor.backgroundColor');
+
+.editor {
+ position: absolute;
+ background-color: backgroundColor;
+ border-style: borderStyle;
+ border-color: borderColor;
+ border-width: borderWidth !important;
+ padding: 5px 0;
+}
+
+.editorInner {
+ padding: 0px;
+}
+
+.buttons {
+ position: absolute;
+ background-color: backgroundColor !important;
+ border-radius: 0 0 5px 5px;
+ border-style: solid;
+ border-width: 0 1px 1px;
+ border-color: borderColor;
+}
+
+.buttonsInner {
+
+}
+
+.buttons .x-toolbar {
+ background: none;
+}
+
+
+.label {
+ padding: 2px 3px 3px 0px;
+ font-size: 12px;
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3RowEditor.html b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3RowEditor.html
new file mode 100644
index 0000000..cfde6e0
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3RowEditor.html
@@ -0,0 +1,8 @@
+
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3RowEditorAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3RowEditorAppearance.java
new file mode 100644
index 0000000..e4af186
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3RowEditorAppearance.java
@@ -0,0 +1,109 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.grid;
+
+import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.core.client.Scheduler.ScheduledCommand;
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.Style.Unit;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.core.client.XTemplates;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.core.client.resources.StyleInjectorHelper;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.grid.editing.GridRowEditing.RowEditorAppearance;
+
+public class Css3RowEditorAppearance implements RowEditorAppearance {
+
+ public interface Css3RowEditorResources extends ClientBundle {
+ @Source("Css3RowEditor.css")
+ Css3RowEditorStyle style();
+
+ ThemeDetails theme();
+ }
+
+ public interface Css3RowEditorStyle extends CssResource {
+ String editor();
+
+ String editorInner();
+
+ String buttons();
+
+ String buttonsInner();
+
+ String label();
+ }
+
+ public interface Template extends XTemplates {
+ @XTemplate(source = "Css3RowEditor.html")
+ SafeHtml render(Css3RowEditorStyle style);
+ }
+
+ private final Css3RowEditorResources resources;
+ private final Css3RowEditorStyle style;
+ private final Template template;
+
+ public Css3RowEditorAppearance() {
+ this(GWT. create(Css3RowEditorResources.class));
+ }
+
+ public Css3RowEditorAppearance(Css3RowEditorResources resources) {
+ this.resources = resources;
+ this.style = this.resources.style();
+
+ this.template = GWT.create(Template.class);
+
+ StyleInjectorHelper.ensureInjected(style, false);
+ }
+
+ @Override
+ public XElement getButtonWrap(XElement parent) {
+ return parent.selectNode("." + style.buttonsInner());
+ }
+
+ @Override
+ public XElement getContentWrap(XElement parent) {
+ return parent.selectNode("." + style.editorInner());
+ }
+
+ @Override
+ public String labelClass() {
+ return style.label();
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder sb) {
+ sb.append(template.render(style));
+ }
+
+ @Override
+ public void onResize(final XElement parent, final int width, final int height) {
+ // button offset width not correct unless we run deferred and allow buttons to
+ // be rendered
+ Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+
+ @Override
+ public void execute() {
+ Element buttons = getButtonWrap(parent).getParentElement();
+ int buttonsWidth = buttons.getOffsetWidth();
+ System.out.println("bw: " + buttonsWidth);
+ int left = (width - buttonsWidth) / 2;
+ int top = parent.getOffsetHeight() - 2;
+
+ buttons.getStyle().setTop(top, Unit.PX);
+ buttons.getStyle().setLeft(left, Unit.PX);
+ }
+ });
+
+ }
+
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3RowExpander.css b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3RowExpander.css
new file mode 100644
index 0000000..eabf086
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3RowExpander.css
@@ -0,0 +1,53 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def specialColumnGradient value('theme.grid.specialColumnGradient');
+@def specialColumnGradientSelected value('theme.grid.specialColumnGradientSelected');
+
+
+.hasExpander .grid-cell, .hasExpander .grid-cellInner {
+ background: none repeat scroll 0 0 transparent;
+ border-width: 0;
+}
+
+.grid-row .cell {
+ vertical-align: top;
+ background: -webkit-linear-gradient(top, specialColumnGradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, specialColumnGradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, specialColumnGradient); /* IE10+ */
+ background: linear-gradient(to bottom, specialColumnGradient); /* W3C */
+
+}
+
+.grid-rowSelected .cell {
+ vertical-align: top;
+ background: -webkit-linear-gradient(top, specialColumnGradientSelected); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, specialColumnGradientSelected); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, specialColumnGradientSelected); /* IE10+ */
+ background: linear-gradient(to bottom, specialColumnGradientSelected); /* W3C */
+}
+
+.rowExpander {
+ cursor: pointer;
+ margin: 5px 3px 3px 3px;
+}
+
+@sprite .rowCollapsed .rowExpander {
+ gwt-image: "expand";
+}
+
+@sprite .rowExpanded .rowExpander {
+ gwt-image: "collapse";
+}
+
+.rowCollapsed .grid-rowBodyRow {
+ display: none;
+}
+
+.rowExpanded .grid-rowBodyRow {
+ display: table-row;
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3RowExpanderAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3RowExpanderAppearance.java
new file mode 100644
index 0000000..34bd90d
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3RowExpanderAppearance.java
@@ -0,0 +1,102 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.grid;
+
+import com.google.gwt.cell.client.Cell.Context;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.resources.client.CssResource.Import;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.core.client.resources.StyleInjectorHelper;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.grid.GridView.GridStateStyles;
+import com.sencha.gxt.widget.core.client.grid.RowExpander.RowExpanderAppearance;
+
+/**
+ *
+ */
+public class Css3RowExpanderAppearance implements RowExpanderAppearance {
+
+ public interface Css3RowExpanderResources extends ClientBundle {
+ @Import(GridStateStyles.class)
+ @Source({"Css3RowExpander.css"})
+ Css3RowExpanderStyle style();
+
+ ThemeDetails theme();
+
+ ImageResource expand();
+
+ ImageResource collapse();
+ }
+
+ public interface Css3RowExpanderStyle extends CssResource {
+ String rowCollapsed();
+
+ String rowExpanded();
+
+ String rowExpander();
+
+ String hasExpander();
+
+ String cell();
+ }
+
+ private final Css3RowExpanderStyle style;
+
+ public Css3RowExpanderAppearance() {
+ this(GWT.create(Css3RowExpanderResources.class));
+ }
+
+ public Css3RowExpanderAppearance(Css3RowExpanderResources resources) {
+ this.style = resources.style();
+
+ StyleInjectorHelper.ensureInjected(style, true);
+ }
+
+ @Override
+ public void finishInit(XElement gridParent) {
+ gridParent.addClassName(style.hasExpander());
+ }
+
+ @Override
+ public String getCellClassName() {
+ return style.cell();
+ }
+
+ @Override
+ public String getRowStyles(M model, int rowIndex) {
+ return style.rowCollapsed();
+ }
+
+ @Override
+ public boolean isExpanded(XElement row) {
+ return row.hasClassName(style.rowExpanded());
+ }
+
+ @Override
+ public void onExpand(XElement row, boolean expand) {
+ if (expand) {
+ row.replaceClassName(style.rowCollapsed(), style.rowExpanded());
+ } else {
+ row.replaceClassName(style.rowExpanded(), style.rowCollapsed());
+ }
+ }
+
+ @Override
+ public void renderExpander(Context context, M value, SafeHtmlBuilder sb) {
+ sb.appendHtmlConstant("
");
+ }
+
+ @Override
+ public boolean isExpandElement(XElement target) {
+ return target.hasClassName(style.rowExpander());
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3RowNumberer.css b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3RowNumberer.css
new file mode 100644
index 0000000..8324a02
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3RowNumberer.css
@@ -0,0 +1,40 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def specialColumnGradient value('theme.grid.specialColumnGradient');
+@def specialColumnGradientSelected value('theme.grid.specialColumnGradientSelected');
+
+@def textFamily value('theme.grid.rowNumberer.text.family');
+@def textWeight value('theme.grid.rowNumberer.text.weight');
+@def textSize value('theme.grid.rowNumberer.text.size');
+@def textColor value('theme.grid.rowNumberer.text.color');
+
+@def padding value('theme.grid.rowNumberer.padding.toString');
+
+.numberer {
+ padding: padding;
+ text-align: center;
+ font-family: textFamily;
+ font-size: textSize;
+ color: textColor;
+ font-weight: textWeight;
+}
+
+.grid-row .cell {
+ background: -webkit-linear-gradient(top, specialColumnGradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, specialColumnGradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, specialColumnGradient); /* IE10+ */
+ background: linear-gradient(to bottom, specialColumnGradient); /* W3C */
+
+}
+
+.grid-rowSelected .cell {
+ background: -webkit-linear-gradient(top, specialColumnGradientSelected); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, specialColumnGradientSelected); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, specialColumnGradientSelected); /* IE10+ */
+ background: linear-gradient(to bottom, specialColumnGradientSelected); /* W3C */
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3RowNumbererAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3RowNumbererAppearance.java
new file mode 100644
index 0000000..72e2e23
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/grid/Css3RowNumbererAppearance.java
@@ -0,0 +1,62 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.grid;
+
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.resources.client.CssResource.Import;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.google.gwt.safehtml.shared.SafeHtmlUtils;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.grid.GridView.GridStateStyles;
+import com.sencha.gxt.widget.core.client.grid.RowNumberer.RowNumbererAppearance;
+
+public class Css3RowNumbererAppearance implements RowNumbererAppearance {
+
+ public interface RowNumbererResources extends ClientBundle {
+ @Import(GridStateStyles.class)
+ @Source("Css3RowNumberer.css")
+ RowNumbererStyles styles();
+
+ //to be placed in sliced impl after sliced job is created
+// @ImageOptions(repeatStyle = RepeatStyle.Vertical)
+// ImageResource specialColumn();
+//
+// @ImageOptions(repeatStyle = RepeatStyle.Vertical)
+// ImageResource specialColumnSelected();
+
+ ThemeDetails theme();
+ }
+ public interface RowNumbererStyles extends CssResource{
+ String numberer();
+ String cell();
+ }
+
+ private final RowNumbererResources resources;
+
+ public Css3RowNumbererAppearance() {
+ resources = com.google.gwt.core.shared.GWT.create(RowNumbererResources.class);
+ resources.styles().ensureInjected();
+ }
+
+ @Override
+ public String getCellClassName() {
+ return resources.styles().cell();
+ }
+
+ @Override
+ public void renderCell(int rowNumber, SafeHtmlBuilder sb) {
+ sb.appendHtmlConstant("").append(rowNumber).appendHtmlConstant("
");
+ }
+
+ @Override
+ public SafeHtml renderHeader() {
+ return SafeHtmlUtils.EMPTY_SAFE_HTML;
+ }
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/Grid.html b/src/com/sencha/gxt/theme/neptune/client/base/grid/Grid.html
new file mode 100644
index 0000000..32eb431
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/grid/Grid.html
@@ -0,0 +1,7 @@
+
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/checked.png b/src/com/sencha/gxt/theme/neptune/client/base/grid/checked.png
new file mode 100644
index 0000000..0c6e9e0
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/grid/checked.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/collapse.png b/src/com/sencha/gxt/theme/neptune/client/base/grid/collapse.png
new file mode 100644
index 0000000..ee06dbc
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/grid/collapse.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/columnHeaderBtn.png b/src/com/sencha/gxt/theme/neptune/client/base/grid/columnHeaderBtn.png
new file mode 100644
index 0000000..67c6873
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/grid/columnHeaderBtn.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/columnMoveBottom.gif b/src/com/sencha/gxt/theme/neptune/client/base/grid/columnMoveBottom.gif
new file mode 100644
index 0000000..cc1e473
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/grid/columnMoveBottom.gif differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/columnMoveTop.gif b/src/com/sencha/gxt/theme/neptune/client/base/grid/columnMoveTop.gif
new file mode 100644
index 0000000..58ff32c
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/grid/columnMoveTop.gif differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/columnsIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/grid/columnsIcon.png
new file mode 100644
index 0000000..405b3be
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/grid/columnsIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/expand.png b/src/com/sencha/gxt/theme/neptune/client/base/grid/expand.png
new file mode 100644
index 0000000..920157a
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/grid/expand.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/groupBy.png b/src/com/sencha/gxt/theme/neptune/client/base/grid/groupBy.png
new file mode 100644
index 0000000..6937ad6
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/grid/groupBy.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/sortAscHeaderIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/grid/sortAscHeaderIcon.png
new file mode 100644
index 0000000..d8597ce
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/grid/sortAscHeaderIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/sortAscendingIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/grid/sortAscendingIcon.png
new file mode 100644
index 0000000..d8597ce
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/grid/sortAscendingIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/sortDescHeaderIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/grid/sortDescHeaderIcon.png
new file mode 100644
index 0000000..41c0137
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/grid/sortDescHeaderIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/sortDescendingIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/grid/sortDescendingIcon.png
new file mode 100644
index 0000000..41c0137
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/grid/sortDescendingIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/grid/unchecked.png b/src/com/sencha/gxt/theme/neptune/client/base/grid/unchecked.png
new file mode 100644
index 0000000..90edd84
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/grid/unchecked.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/info/Css3DefaultInfoConfigAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/info/Css3DefaultInfoConfigAppearance.java
new file mode 100644
index 0000000..599057e
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/info/Css3DefaultInfoConfigAppearance.java
@@ -0,0 +1,47 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.info;
+
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.core.client.XTemplates;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.info.DefaultInfoConfig.DefaultInfoConfigAppearance;
+
+public class Css3DefaultInfoConfigAppearance implements DefaultInfoConfigAppearance {
+ interface Style extends CssResource {
+ String header();
+ String message();
+ }
+ interface Resources extends ClientBundle {
+ Style infoConfig();
+ ThemeDetails theme();
+ }
+ interface Template extends XTemplates {
+ @XTemplate("{message}
")
+ SafeHtml render(Style style, SafeHtml title, SafeHtml message);
+ }
+
+ private Template template;
+ private Style style;
+
+ public Css3DefaultInfoConfigAppearance() {
+ template = GWT.create(Template.class);
+ Resources res = GWT.create(Resources.class);
+ style = res.infoConfig();
+ style.ensureInjected();
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder sb, SafeHtml title, SafeHtml message) {
+ sb.append(template.render(style, title, message));
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/info/Css3InfoAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/info/Css3InfoAppearance.java
new file mode 100644
index 0000000..b831fe7
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/info/Css3InfoAppearance.java
@@ -0,0 +1,53 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.info;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.core.client.XTemplates;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.info.Info.InfoAppearance;
+
+public class Css3InfoAppearance implements InfoAppearance {
+ interface Template extends XTemplates {
+ @XTemplate("")
+ SafeHtml render(Styles styles);
+ }
+ interface Styles extends CssResource {
+ String infoWrap();
+ String info();
+ }
+ interface Resources extends ClientBundle {
+ Styles info();
+ ThemeDetails theme();
+ }
+
+ private final Template template;
+ private final Styles styles;
+
+ public Css3InfoAppearance() {
+ this.template = GWT.create(Template.class);
+ Resources res = GWT.create(Resources.class);
+ styles = res.info();
+ styles.ensureInjected();
+ }
+
+ @Override
+ public XElement getContentElement(XElement parent) {
+ return parent.getFirstChildElement().getFirstChildElement().cast();
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder sb) {
+ sb.append(template.render(styles));
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/info/info.css b/src/com/sencha/gxt/theme/neptune/client/base/info/info.css
new file mode 100644
index 0000000..f8f8f0f
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/info/info.css
@@ -0,0 +1,40 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def radius value('theme.info.borderRadius', 'px');
+@def borderStyle value('theme.info.border.style');
+@def borderColor value('theme.info.border.color');
+@def borderWidth value('theme.info.border.toString');
+
+@def css3Leftover value('theme.info.radiusMinusBorderWidth.toString');
+
+@def padding value('theme.info.padding.toString');
+@def margin value('theme.info.margin.toString');
+
+@def opacity value('theme.info.opacity');
+@def backgroundColor value('theme.info.backgroundColor');
+
+.infoWrap {
+ border-color: borderColor;
+ border-style: borderStyle;
+ border-width: borderWidth;
+ border-radius: radius;
+ overflow: hidden;
+
+ background-color: backgroundColor;
+
+ opacity: opacity;
+
+ margin: margin;
+ /* applying the radius as padding here, avoiding us needing to do math when working out the sliced padding,
+ which already has the padding from the images */
+ padding: css3Leftover;
+}
+
+.info {
+ padding: padding;
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/info/infoConfig.css b/src/com/sencha/gxt/theme/neptune/client/base/info/infoConfig.css
new file mode 100644
index 0000000..f277721
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/info/infoConfig.css
@@ -0,0 +1,34 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def headerColor value('theme.info.headerText.color');
+@def headerSize value('theme.info.headerText.size');
+@def headerWeight value('theme.info.headerText.weight');
+@def headerFamily value('theme.info.headerText.family');
+@def messageColor value('theme.info.messageText.color');
+@def messageSize value('theme.info.messageText.size');
+@def messageWeight value('theme.info.messageText.weight');
+@def messageFamily value('theme.info.messageText.family');
+
+@def headerPadding value('theme.info.headerPadding.toString');
+@def messagePadding value('theme.info.messagePadding.toString');
+
+.header {
+ color: headerColor;
+ font-size: headerSize;
+ font-weight: headerWeight;
+ font-family: headerFamily;
+ padding: headerPadding;
+}
+
+.message {
+ color: messageColor;
+ font-size: messageSize;
+ font-weight: messageWeight;
+ font-family: messageFamily;
+ padding: messagePadding;
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/listview/Css3ListView.css b/src/com/sencha/gxt/theme/neptune/client/base/listview/Css3ListView.css
new file mode 100644
index 0000000..84d1833
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/listview/Css3ListView.css
@@ -0,0 +1,101 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def textFamily value('theme.listview.text.family');
+@def textSize value('theme.listview.text.size');
+@def textWeight value('theme.listview.text.weight');
+@def textColor value('theme.listview.text.color');
+@def itemLineHeight value('theme.listview.lineHeight');
+
+@def backgroundColor value('theme.listview.backgroundColor');
+
+@def borderWidth value('theme.listview.border.toString');
+@def borderColor value('theme.listview.border.color');
+@def borderStyle value('theme.listview.border.style');
+
+@def itemPadding value('theme.listview.item.padding');
+@def itemGradient value('theme.listview.item.gradient');
+@def itemBorderWidth value('theme.listview.item.border.toString');
+@def itemBorderStyle value('theme.listview.item.border.style');
+@def itemBorderColor value('theme.listview.item.border.color');
+
+@def overItemPadding value('theme.listview.overItem.padding');
+@def overItemGradient value('theme.listview.overItem.gradient');
+@def overItemBorderWidth value('theme.listview.overItem.border.toString');
+@def overItemBorderStyle value('theme.listview.overItem.border.style');
+@def overItemBorderColor value('theme.listview.overItem.border.color');
+
+@def selectedItemPadding value('theme.listview.selectedItem.padding');
+@def selectedItemGradient value('theme.listview.selectedItem.gradient');
+@def selectedItemBorderWidth value('theme.listview.selectedItem.border.toString');
+@def selectedItemBorderStyle value('theme.listview.selectedItem.border.style');
+@def selectedItemBorderColor value('theme.listview.selectedItem.border.color');
+
+
+.view {
+ outline: 0 none;
+ position: relative;
+
+ background-color: backgroundColor;
+
+ border-width: borderWidth;
+ border-style: borderStyle;
+ border-color: borderColor;
+
+ overflow-y: auto;
+}
+
+.item {
+ color: textColor;
+ font-family: textFamily;
+ font-size: textSize;
+ font-weight: textWeight;
+ line-height: itemLineHeight;
+
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ cursor: pointer;
+
+
+ border-width: itemBorderWidth;
+ border-style: itemBorderStyle;
+ border-color: itemBorderColor;
+
+ padding: itemPadding;
+
+ background: -webkit-linear-gradient(top, itemGradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, itemGradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, itemGradient); /* IE10+ */
+ background: linear-gradient(to bottom, itemGradient); /* W3C */
+}
+
+.over {
+ border-width: overItemBorderWidth;
+ border-style: overItemBorderStyle;
+ border-color: overItemBorderColor;
+
+ padding: overItemPadding;
+
+ background: -webkit-linear-gradient(top, overItemGradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, overItemGradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, overItemGradient); /* IE10+ */
+ background: linear-gradient(to bottom, overItemGradient); /* W3C */
+}
+
+.sel {
+ border-width: selectedItemBorderWidth;
+ border-style: selectedItemBorderStyle;
+ border-color: selectedItemBorderColor;
+
+ padding: selectedItemPadding;
+
+ background: -webkit-linear-gradient(top, selectedItemGradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, selectedItemGradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, selectedItemGradient); /* IE10+ */
+ background: linear-gradient(to bottom, selectedItemGradient); /* W3C */
+}
+
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/listview/Css3ListViewAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/listview/Css3ListViewAppearance.java
new file mode 100644
index 0000000..3d604f3
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/listview/Css3ListViewAppearance.java
@@ -0,0 +1,108 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.listview;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.NodeList;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.core.client.XTemplates;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.ListView.ListViewAppearance;
+
+public class Css3ListViewAppearance implements ListViewAppearance {
+
+ public interface Css3ListViewResources extends ClientBundle {
+ @Source("Css3ListView.css")
+ Css3ListViewStyle css();
+
+ ThemeDetails theme();
+ }
+
+ public interface Css3ListViewStyle extends CssResource {
+
+ String item();
+
+ String over();
+
+ String sel();
+
+ String view();
+ }
+
+ public interface Css3ListViewTemplates extends XTemplates {
+ @XTemplate("")
+ SafeHtml renderBody(Css3ListViewStyle style);
+ @XTemplate("{content}
")
+ SafeHtml renderItem(Css3ListViewStyle style, SafeHtml content);
+ }
+
+ private final Css3ListViewTemplates template;
+ private final Css3ListViewStyle style;
+
+ public Css3ListViewAppearance() {
+ this(GWT.create(Css3ListViewResources.class));
+ }
+ public Css3ListViewAppearance(Css3ListViewResources resources) {
+ this.style = resources.css();
+ this.style.ensureInjected();
+ this.template = GWT.create(Css3ListViewTemplates.class);
+ }
+
+ @Override
+ public Element findCellParent(XElement item) {
+ return item;
+ }
+
+ @Override
+ public Element findElement(XElement child) {
+ return child.findParentElement("." + style.item(), 20);
+ }
+
+ @Override
+ public List findElements(XElement parent) {
+ NodeList nodes = parent.select("." + style.item());
+ List temp = new ArrayList();
+ for (int i = 0; i < nodes.getLength(); i++) {
+ temp.add(nodes.getItem(i));
+ }
+
+ return temp;
+ }
+
+ @Override
+ public void onOver(XElement item, boolean over) {
+ item.setClassName(style.over(), over);
+ }
+
+ @Override
+ public void onSelect(XElement item, boolean select) {
+ item.setClassName(style.sel(), select);
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder builder) {
+ builder.append(template.renderBody(style));
+ }
+
+ @Override
+ public void renderEnd(SafeHtmlBuilder builder) {
+ }
+
+ @Override
+ public void renderItem(SafeHtmlBuilder sb, SafeHtml content) {
+ sb.append(template.renderItem(style, content));
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/mask/Css3Mask.css b/src/com/sencha/gxt/theme/neptune/client/base/mask/Css3Mask.css
new file mode 100644
index 0000000..6e3915d
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/mask/Css3Mask.css
@@ -0,0 +1,84 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def opacity value('theme.mask.opacity');
+@def backgroundColor value('theme.mask.backgroundColor');
+
+@def boxPadding value('theme.mask.box.padding.toString');
+
+@def boxBorderColor value('theme.mask.box.borderColor');
+@def boxBorderStyle value('theme.mask.box.borderStyle');
+@def boxBorderWidth value('theme.mask.box.borderWidth', 'px');
+
+@def boxBorderRadius value('theme.mask.box.borderRadius', 'px');
+
+@def boxRadiusMinusBorderWidth value('theme.mask.box.radiusMinusBorderWidth', 'px');
+
+@def boxBackgroundColor value('theme.mask.box.backgroundColor');
+
+@def boxTextFamily value('theme.mask.box.text.family');
+@def boxTextWeight value('theme.mask.box.text.weight');
+@def boxTextSize value('theme.mask.box.text.size');
+@def boxTextColor value('theme.mask.box.text.color');
+
+@def boxTextPadding value('theme.mask.box.textPadding.toString');
+
+@def boxLoadingImagePosition value('theme.mask.box.loadingImagePosition');
+
+.mask {
+ z-index: 100;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+
+ opacity: opacity;
+
+ background-color: backgroundColor;
+}
+
+.box {
+ position: absolute;
+
+ border-radius: boxBorderRadius;
+ border-width: boxBorderWidth;
+ border-style: boxBorderStyle;
+ border-color: boxBorderColor;
+
+ padding: boxRadiusMinusBorderWidth;
+
+ overflow: hidden;
+ background-color: boxBackgroundColor;
+}
+
+@sprite .text {
+ gwt-image: 'loading';
+ width: auto;
+ height:auto;
+ background-position: boxLoadingImagePosition;
+
+ margin: boxPadding;
+ padding: boxTextPadding;
+
+ color: boxTextColor;
+ font-family: boxTextFamily;
+ font-weight: boxTextWeight;
+ font-size: boxTextSize;
+}
+
+.positioned {
+ position: relative !important;
+}
+
+.masked {
+ overflow: hidden !important;
+}
+
+.masked select,.masked object,.masked embed {
+ visibility: hidden;
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/mask/Css3MaskAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/mask/Css3MaskAppearance.java
new file mode 100644
index 0000000..7ab95cc
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/mask/Css3MaskAppearance.java
@@ -0,0 +1,90 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.mask;
+
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.safehtml.shared.SafeHtmlUtils;
+import com.sencha.gxt.core.client.GXT;
+import com.sencha.gxt.core.client.dom.Mask.MaskAppearance;
+import com.sencha.gxt.core.client.dom.Mask.MaskDefaultAppearance.MaskStyle;
+import com.sencha.gxt.core.client.dom.Mask.MessageTemplates;
+import com.sencha.gxt.core.client.dom.XDOM;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.core.client.resources.StyleInjectorHelper;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+
+public class Css3MaskAppearance implements MaskAppearance {
+
+ public interface Css3MaskResources extends ClientBundle {
+ @Source("Css3Mask.css")
+ Css3MaskStyles styles();
+
+ @Source("com/sencha/gxt/theme/base/client/grid/loading.gif")
+ ImageResource loading();
+
+ ThemeDetails theme();
+ }
+
+ public interface Css3MaskStyles extends MaskStyle {
+
+ }
+
+ private final Css3MaskResources resources = GWT.create(Css3MaskResources.class);
+ private final MessageTemplates template = GWT.create(MessageTemplates.class);
+
+ public Css3MaskAppearance() {
+ StyleInjectorHelper.ensureInjected(resources.styles(), true);
+ }
+
+ @Override
+ public void mask(XElement parent, String message) {
+ XElement mask = XElement.createElement("div");
+ mask.setClassName(resources.styles().mask());
+ parent.appendChild(mask);
+
+ XElement box = null;
+ if (message != null) {
+ box = XDOM.create(template.template(resources.styles(), SafeHtmlUtils.htmlEscape(message))).cast();
+ parent.appendChild(box);
+ }
+
+ if (GXT.isIE() && !(GXT.isIE7()) && "auto".equals(parent.getStyle().getHeight())) {
+ mask.setSize(parent.getOffsetWidth(), parent.getOffsetHeight());
+ }
+
+ if (box != null) {
+ box.updateZIndex(0);
+ box.center(parent);
+ }
+
+ }
+
+ @Override
+ public String masked() {
+ return resources.styles().masked();
+ }
+
+ @Override
+ public String positioned() {
+ return resources.styles().positioned();
+ }
+
+ @Override
+ public void unmask(XElement parent) {
+ XElement mask = parent.selectNode("> ." + resources.styles().mask());
+ if (mask != null) {
+ mask.removeFromParent();
+ }
+ XElement box = parent.selectNode("> ." + resources.styles().box());
+ if (box != null) {
+ box.removeFromParent();
+ }
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3CheckMenuItemAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3CheckMenuItemAppearance.java
new file mode 100644
index 0000000..c600a1a
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3CheckMenuItemAppearance.java
@@ -0,0 +1,44 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.menu;
+
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.ImageResource;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.widget.core.client.menu.CheckMenuItem.CheckMenuItemAppearance;
+
+public class Css3CheckMenuItemAppearance extends Css3MenuItemAppearance implements CheckMenuItemAppearance {
+
+ public interface Css3CheckMenuItemResources extends ClientBundle {
+ ImageResource checked();
+ ImageResource unchecked();
+ ImageResource groupChecked();
+ }
+
+ private final Css3CheckMenuItemResources resources = GWT.create(Css3CheckMenuItemResources.class);
+
+ @Override
+ public void applyChecked(XElement parent, boolean state) {
+ }
+
+ @Override
+ public ImageResource checked() {
+ return resources.checked();
+ }
+
+ @Override
+ public ImageResource unchecked() {
+ return resources.unchecked();
+ }
+
+ @Override
+ public ImageResource radio() {
+ return resources.groupChecked();
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3HeaderMenuItem.css b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3HeaderMenuItem.css
new file mode 100644
index 0000000..d477f19
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3HeaderMenuItem.css
@@ -0,0 +1,36 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def borderWidth value('theme.menu.header.border.toString');
+@def borderStyle value('theme.menu.header.border.style');
+@def borderColor value('theme.menu.header.border.color');
+
+@def backgroundColor value('theme.menu.header.backgroundColor');
+
+@def textFamily value('theme.menu.header.itemText.family');
+@def textSize value('theme.menu.header.itemText.size');
+@def textColor value('theme.menu.header.itemText.color');
+@def textWeight value('theme.menu.header.itemText.weight');
+
+@def padding value('theme.menu.header.itemPadding.toString');
+
+
+.menuText {
+ border-color: borderColor;
+ border-style: borderStyle;
+ border-width: borderWidth;
+
+ background-color: backgroundColor;
+
+ font-family: textFamily;
+ font-size: textSize;
+ font-weight: textWeight;
+ color: textColor;
+
+ display: block;
+ padding: padding;
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3HeaderMenuItemAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3HeaderMenuItemAppearance.java
new file mode 100644
index 0000000..f007b1b
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3HeaderMenuItemAppearance.java
@@ -0,0 +1,53 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.menu;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.menu.HeaderMenuItem.HeaderMenuItemAppearance;
+
+public class Css3HeaderMenuItemAppearance implements HeaderMenuItemAppearance {
+
+ public interface Css3HeaderMenuItemResources extends ClientBundle {
+ @Source("Css3HeaderMenuItem.css")
+ Css3HeaderMenuItemStyle headerStyle();
+
+ ThemeDetails theme();
+ }
+
+ public interface Css3HeaderMenuItemStyle extends CssResource {
+
+ public String menuText();
+
+ }
+
+ private Css3HeaderMenuItemStyle style;
+
+ public Css3HeaderMenuItemAppearance() {
+ Css3HeaderMenuItemResources resources = GWT.create(Css3HeaderMenuItemResources.class);
+ this.style = resources.headerStyle();
+ this.style.ensureInjected();
+ }
+
+ @Override
+ public void applyItemStyle(Element element) {
+ element.addClassName(style.menuText());
+ }
+
+ @Override
+ public void onActivate(XElement parent) {
+ }
+
+ @Override
+ public void onDeactivate(XElement parent) {
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3Menu.css b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3Menu.css
new file mode 100644
index 0000000..043d754
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3Menu.css
@@ -0,0 +1,103 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def gradient value('theme.menu.gradient');
+@def borderWidth value('theme.menu.border.toString');
+@def borderStyle value('theme.menu.border.style');
+@def borderColor value('theme.menu.border.color');
+
+@def listPadding value('theme.menu.padding.toString');
+
+.menu {
+ outline: 0 none;
+
+ background: -webkit-linear-gradient(left, gradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(left, gradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(left, gradient); /* IE10+ */
+ background: linear-gradient(to right, gradient); /* W3C */
+ border-color:borderColor;
+ border-width: borderWidth;
+ border-style: borderStyle;
+}
+
+@if user.agent gecko1_8 gecko {
+ .menu {
+ -moz-outline: none;
+ }
+}
+
+@if user.agent ie6 ie8 {
+ .menu {
+ zoom: 1;
+ overflow: hidden;
+ }
+}
+
+.menu a {
+ text-decoration: none !important;
+}
+
+.menuList {
+ padding: listPadding;
+ background: transparent;
+ border: 0 none;
+ overflow: hidden;
+ overflow-y: hidden;
+}
+
+@if user.agent ie6 ie8 {
+ .menuList {
+ position: relative;
+ }
+}
+
+.dateMenu {
+ padding: 0 !important;
+}
+
+.dateMenu .menuList {
+ padding: 0;
+}
+
+.menuListItemIndent {
+ padding-left: 27px !important;
+}
+
+.menuRadioGroup {}
+
+.noSeparator {
+ background-image: none;
+}
+
+.plain {
+ background-color: #fff !important;
+}
+
+@sprite .menuScrollerTop {
+ gwt-image: "miniTop";
+}
+
+@sprite .menuScrollerBottom {
+ gwt-image: "miniBottom";
+}
+
+.menuScroller {
+ margin: 0;
+ width: 100%;
+ background-position: center;
+ height: 8px;
+ line-height: 8px;
+ cursor: pointer;
+ padding: 0;
+ border-width: 1px 0;
+}
+
+
+.menuScrollerActive {
+ height: 6px;
+ line-height: 6px;
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3MenuAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3MenuAppearance.java
new file mode 100644
index 0000000..a78cdd2
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3MenuAppearance.java
@@ -0,0 +1,39 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.menu;
+
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.ImageResource;
+import com.sencha.gxt.theme.base.client.menu.MenuBaseAppearance;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+
+public class Css3MenuAppearance extends MenuBaseAppearance {
+ public interface Css3MenuResources extends MenuResources, ClientBundle {
+ @Override
+ @Source("Css3Menu.css")
+ Css3MenuStyle style();
+
+ ImageResource miniTop();
+ ImageResource miniBottom();
+
+ ThemeDetails theme();
+ }
+ public interface Css3MenuStyle extends MenuStyle {
+
+ }
+
+ public Css3MenuAppearance() {
+ this(GWT.create(Css3MenuResources.class),
+ GWT.create(BaseMenuTemplate.class));
+ }
+
+ public Css3MenuAppearance(Css3MenuResources resources, BaseMenuTemplate template) {
+ super(resources, template);
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3MenuBar.css b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3MenuBar.css
new file mode 100644
index 0000000..6f40c86
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3MenuBar.css
@@ -0,0 +1,28 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def padding value('theme.menu.bar.padding.toString');
+@def borderWidth value('theme.menu.bar.border.toString');
+@def borderStyle value('theme.menu.bar.border.style');
+@def borderColor value('theme.menu.bar.border.color');
+
+@def gradient value('theme.menu.bar.gradient');
+
+.menuBar {
+ background: -webkit-linear-gradient(top, gradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, gradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, gradient); /* IE10+ */
+ background: linear-gradient(to bottom, gradient); /* W3C */
+
+ border-width: borderWidth;
+ border-style: borderStyle;
+ border-color: borderColor;
+
+ cursor: default;
+ padding: padding;
+ overflow: hidden;
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3MenuBarAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3MenuBarAppearance.java
new file mode 100644
index 0000000..99ab836
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3MenuBarAppearance.java
@@ -0,0 +1,53 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.menu;
+
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.core.client.XTemplates;
+import com.sencha.gxt.core.client.resources.CommonStyles;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.menu.MenuBar.MenuBarAppearance;
+
+public class Css3MenuBarAppearance implements MenuBarAppearance {
+ public interface Css3MenuBarResources extends ClientBundle {
+ @Source("Css3MenuBar.css")
+ Css3MenuBarStyle style();
+
+ ThemeDetails theme();
+ }
+
+ public interface Css3MenuBarStyle extends CssResource {
+ String menuBar();
+ }
+
+ public interface MenuBarTemplate extends XTemplates {
+ @XTemplate("")
+ SafeHtml render(String cssClasses);
+ }
+
+ private Css3MenuBarStyle style;
+ private MenuBarTemplate template = GWT.create(MenuBarTemplate.class);
+
+ public Css3MenuBarAppearance() {
+ this(GWT.create(Css3MenuBarResources.class));
+ }
+
+ public Css3MenuBarAppearance(Css3MenuBarResources resources) {
+ style = resources.style();
+ style.ensureInjected();
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder builder) {
+ builder.append(template.render(style.menuBar() + " " + CommonStyles.get().noFocusOutline()));
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3MenuBarItem.css b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3MenuBarItem.css
new file mode 100644
index 0000000..82b9ff2
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3MenuBarItem.css
@@ -0,0 +1,42 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def itemPadding value('theme.menu.bar.itemPadding.toString');
+
+@def textColor value('theme.menu.bar.itemText.color');
+@def textFamily value('theme.menu.bar.itemText.family');
+@def textSize value('theme.menu.bar.itemText.size');
+@def textWeight value('theme.menu.bar.itemText.weight');
+@def textLineHeight value('theme.menu.bar.itemLineHeight');
+
+@def hoverItemGradient value('theme.menu.bar.hoverItemGradient');
+@def activeItemGradient value('theme.menu.bar.activeItemGradient');
+
+.over {
+ background: -webkit-linear-gradient(top, hoverItemGradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, hoverItemGradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, hoverItemGradient); /* IE10+ */
+ background: linear-gradient(to bottom, hoverItemGradient); /* W3C */
+}
+
+.active {
+ background: -webkit-linear-gradient(top, activeItemGradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, activeItemGradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, activeItemGradient); /* IE10+ */
+ background: linear-gradient(to bottom, activeItemGradient); /* W3C */
+}
+
+.menuBarItem {
+ font-size: textSize;
+ font-family: textFamily;
+ font-weight: textWeight;
+ color: textColor;
+ line-height: textLineHeight;
+
+ padding: itemPadding;
+ float:left;
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3MenuBarItemAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3MenuBarItemAppearance.java
new file mode 100644
index 0000000..545f0ac
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3MenuBarItemAppearance.java
@@ -0,0 +1,36 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.menu;
+
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.sencha.gxt.theme.base.client.menu.MenuBarItemBaseAppearance;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.menu.MenuBarItem.MenuBarItemAppearance;
+
+public class Css3MenuBarItemAppearance extends MenuBarItemBaseAppearance implements MenuBarItemAppearance {
+ public interface Css3MenuBarItemResources extends MenuBarItemResources, ClientBundle {
+ @Override
+ @Source("Css3MenuBarItem.css")
+ Css3MenuBarItemStyle css();
+
+ ThemeDetails theme();
+ }
+
+ public interface Css3MenuBarItemStyle extends MenuBarItemStyle {
+
+ }
+
+ public Css3MenuBarItemAppearance() {
+ this(GWT.create(Css3MenuBarItemResources.class));
+ }
+
+ public Css3MenuBarItemAppearance(Css3MenuBarItemResources resources) {
+ super(resources);
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3MenuItem.css b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3MenuItem.css
new file mode 100644
index 0000000..e2709fd
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3MenuItem.css
@@ -0,0 +1,101 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def itemPadding value('theme.menu.itemPadding.toString');
+
+@def textColor value('theme.menu.itemText.color');
+@def textFamily value('theme.menu.itemText.family');
+@def textSize value('theme.menu.itemText.size');
+@def textWeight value('theme.menu.itemText.weight');
+@def itemLineHeight value('theme.menu.itemLineHeight');
+
+@def activeGradient value('theme.menu.activeItemGradient');
+@def activeBorderWidth value('theme.menu.activeItemBorder.toString');
+@def activeBorderStyle value('theme.menu.activeItemBorder.style');
+@def activeBorderColor value('theme.menu.activeItemBorder.color');
+
+@def activeTextColor value('theme.menu.activeItemText.color');
+@def activeTextFamily value('theme.menu.activeItemText.family');
+@def activeTextSize value('theme.menu.activeItemText.size');
+@def activeTextWeight value('theme.menu.activeItemText.weight');
+
+
+@if user.agent gecko gecko1_8 {
+ .menuItem {
+ outline-color: -moz-use-text-color;
+ }
+}
+
+.menuItem {
+ display: block;
+ outline-style: none;
+ outline-width: 0;
+ padding: 0 21px 0 27px;
+ position: relative;
+ text-decoration: none;
+ white-space: nowrap;
+}
+
+.menuListItem {
+ white-space: nowrap;
+ display: block;
+ padding: activeBorderWidth;
+ margin: itemPadding;
+ cursor: pointer;
+
+ font-size: textSize;
+ font-family: textFamily;
+ font-weight: textWeight;
+ line-height: itemLineHeight;
+ color: textColor;
+}
+
+.menuItemIcon {
+ border: 0 none;
+ height: 16px;
+ padding: 0;
+ vertical-align: top;
+ width: 16px;
+ position: absolute;
+ left: 3px;
+ top: 3px;
+ margin: 0;
+ background-position: center;
+}
+
+@if gxt.user.agent ie6 {
+ .menuItemIcon {
+ left: -24px;
+ }
+}
+
+@if user.agent ie6 ie8 ie9 {
+ .menuItemIcon {
+ vertical-align: middle;
+ }
+}
+
+@sprite .menuItemArrow {
+ gwt-image: "menuParent";
+ height: auto; /* override gwt-image default behavior */
+ width: auto; /* override gwt-image default behavior */
+ background-position: right;
+ background-repeat: no-repeat;
+}
+
+
+.active {
+ background: -webkit-linear-gradient(left, activeGradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(left, activeGradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(left, activeGradient); /* IE10+ */
+ background: linear-gradient(to right, activeGradient); /* W3C */
+ border-color: activeBorderColor;
+ border-width: activeBorderWidth;
+ border-style: activeBorderStyle;
+
+ padding: 0 !important; /*removes padding set by .menuListItem that we use in the border here*/
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3MenuItemAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3MenuItemAppearance.java
new file mode 100644
index 0000000..591f4e4
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3MenuItemAppearance.java
@@ -0,0 +1,41 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.menu;
+
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.ImageResource;
+import com.sencha.gxt.theme.base.client.menu.MenuItemBaseAppearance;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+
+public class Css3MenuItemAppearance extends MenuItemBaseAppearance {
+
+ public interface Css3MenuItemResources extends MenuItemResources, ClientBundle {
+
+ @Override
+ @Source("Css3MenuItem.css")
+ Css3MenuItemStyle style();
+
+ ThemeDetails theme();
+
+ ImageResource menuParent();
+ }
+
+ public interface Css3MenuItemStyle extends MenuItemStyle {
+
+ }
+
+ public Css3MenuItemAppearance() {
+ this(GWT.create(Css3MenuItemResources.class),
+ GWT.create(MenuItemTemplate.class));
+
+ }
+ public Css3MenuItemAppearance(Css3MenuItemResources resources, MenuItemTemplate template) {
+ super(resources, template);
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3SeparatorMenuItem.css b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3SeparatorMenuItem.css
new file mode 100644
index 0000000..67b706d
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3SeparatorMenuItem.css
@@ -0,0 +1,22 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def height value('theme.menu.separator.height', 'px');
+@def margin value('theme.menu.separator.margin');
+@def color value('theme.menu.separator.color');
+
+.menuSep {
+ display: block;
+ overflow: hidden;
+ line-height: height;
+
+ margin: margin;
+ background-color: color;
+}
+
+
+.active {}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3SeparatorMenuItemAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3SeparatorMenuItemAppearance.java
new file mode 100644
index 0000000..e39bf8f
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/menu/Css3SeparatorMenuItemAppearance.java
@@ -0,0 +1,32 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.menu;
+
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.sencha.gxt.theme.base.client.menu.SeparatorMenuItemBaseAppearance;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+
+public class Css3SeparatorMenuItemAppearance extends SeparatorMenuItemBaseAppearance {
+
+ public interface Css3SeparatorMenuItemResources extends SeparatorMenuItemResources, ClientBundle {
+ @Override
+ @Source("Css3SeparatorMenuItem.css")
+ Css3SeparatorMenuItemStyle style();
+
+ ThemeDetails theme();
+ }
+
+ public interface Css3SeparatorMenuItemStyle extends SeparatorMenuItemStyle {
+
+ }
+
+ public Css3SeparatorMenuItemAppearance() {
+ super(GWT.create(Css3SeparatorMenuItemResources.class), GWT.create(SeparatorMenuItemTemplate.class));
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/menu/checked.png b/src/com/sencha/gxt/theme/neptune/client/base/menu/checked.png
new file mode 100644
index 0000000..0c6e9e0
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/menu/checked.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/menu/groupChecked.png b/src/com/sencha/gxt/theme/neptune/client/base/menu/groupChecked.png
new file mode 100644
index 0000000..e7aa6bb
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/menu/groupChecked.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/menu/menuParent.png b/src/com/sencha/gxt/theme/neptune/client/base/menu/menuParent.png
new file mode 100644
index 0000000..0b4d20c
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/menu/menuParent.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/menu/miniBottom.png b/src/com/sencha/gxt/theme/neptune/client/base/menu/miniBottom.png
new file mode 100644
index 0000000..d9bfd74
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/menu/miniBottom.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/menu/miniTop.png b/src/com/sencha/gxt/theme/neptune/client/base/menu/miniTop.png
new file mode 100644
index 0000000..9dec2b3
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/menu/miniTop.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/menu/unchecked.png b/src/com/sencha/gxt/theme/neptune/client/base/menu/unchecked.png
new file mode 100644
index 0000000..90edd84
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/menu/unchecked.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3ContentPanel.css b/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3ContentPanel.css
new file mode 100644
index 0000000..289597e
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3ContentPanel.css
@@ -0,0 +1,48 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def backgroundColor value('theme.panel.backgroundColor');
+@def borderColor value('theme.panel.border.color');
+@def borderStyle value('theme.panel.border.style');
+@def borderWidth value('theme.panel.border.toString');
+
+@def textColor value('theme.panel.textColor');
+@def headerBackgroundColor value('theme.panel.headerBackgroundColor');
+@def headerGradient value('theme.panel.headerGradient');
+@def padding value('theme.panel.headerPadding.toString');
+
+.panel {
+ outline: 0 none;
+ border-style: borderStyle;
+ border-width: borderWidth;
+ border-color: borderColor;
+}
+
+.body {
+ background-color: backgroundColor;
+ border: none;
+ position: relative;
+ overflow: hidden;
+}
+
+.header {
+ position: relative;
+
+ background: -webkit-linear-gradient(top, headerGradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, headerGradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, headerGradient); /* IE10+ */
+ background: linear-gradient(to bottom, headerGradient); /* W3C */
+
+ padding: padding;
+}
+
+.footer {
+ position: relative;
+}
+
+.bodyWrap {
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3ContentPanel.html b/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3ContentPanel.html
new file mode 100644
index 0000000..f5649e5
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3ContentPanel.html
@@ -0,0 +1,7 @@
+
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3ContentPanelAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3ContentPanelAppearance.java
new file mode 100644
index 0000000..ae45443
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3ContentPanelAppearance.java
@@ -0,0 +1,150 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.panel;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.core.client.Style;
+import com.sencha.gxt.core.client.XTemplates;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.core.client.resources.StyleInjectorHelper;
+import com.sencha.gxt.core.client.util.Size;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.ContentPanel.ContentPanelAppearance;
+import com.sencha.gxt.widget.core.client.Header;
+import com.sencha.gxt.widget.core.client.button.IconButton.IconConfig;
+import com.sencha.gxt.widget.core.client.button.ToolButton;
+
+/**
+ */
+public class Css3ContentPanelAppearance implements ContentPanelAppearance {
+
+ public interface Css3ContentPanelResources extends ClientBundle {
+ @Source("Css3ContentPanel.css")
+ Css3ContentPanelStyle style();
+
+ ThemeDetails theme();
+ }
+
+ public interface ThemeDetailsBundle extends ClientBundle {
+
+ ThemeDetails theme();
+ }
+
+ public interface Css3ContentPanelStyle extends CssResource {
+ String body();
+
+ String bodyWrap();
+
+ String footer();
+
+ String header();
+
+ String panel();
+ }
+
+ public interface Css3ContentPanelTemplate extends XTemplates {
+ @XTemplate(source = "Css3ContentPanel.html")
+ SafeHtml render(Css3ContentPanelStyle style);
+ }
+
+ protected Css3ContentPanelTemplate template;
+ protected final Css3ContentPanelStyle style;
+ protected final Css3ContentPanelResources resources;
+ protected final ThemeDetails theme;
+
+ public Css3ContentPanelAppearance() {
+ this(GWT. create(Css3ContentPanelResources.class));
+ }
+
+ public Css3ContentPanelAppearance(Css3ContentPanelResources resources) {
+ this(resources, GWT. create(Css3ContentPanelTemplate.class));
+ }
+
+ public Css3ContentPanelAppearance(Css3ContentPanelResources resources, Css3ContentPanelTemplate template) {
+ this.resources = resources;
+ this.style = this.resources.style();
+
+ StyleInjectorHelper.ensureInjected(this.style, true);
+ this.template = template;
+
+ ThemeDetailsBundle bundle = GWT.create(ThemeDetailsBundle.class);
+ this.theme = bundle.theme();
+ }
+
+ @Override
+ public Header.HeaderAppearance getHeaderAppearance() {
+ return new Css3HeaderAppearance();
+ }
+
+ @Override
+ public void onHideHeader(XElement parent, boolean hide) {
+ parent.selectNode("." + style.header()).setVisible(!hide);
+ }
+
+ @Override
+ public void onBodyBorder(XElement parent, boolean border) {
+ getContentElem(parent).applyStyles(!border ? "border: 0px" : "");
+ }
+
+ @Override
+ public XElement getBodyWrap(XElement parent) {
+ return parent.selectNode("." + style.bodyWrap());
+ }
+
+ @Override
+ public XElement getContentElem(XElement parent) {
+ return parent.selectNode("." + style.body());
+ }
+
+ @Override
+ public XElement getFooterElem(XElement parent) {
+ return parent.selectNode("." + style.footer());
+ }
+
+ @Override
+ public int getFrameHeight(XElement parent) {
+ return theme.panel().border().top() + theme.panel().border().bottom();
+ }
+
+ @Override
+ public int getFrameWidth(XElement parent) {
+ int adj = parent.getBorders(Style.Side.LEFT, Style.Side.RIGHT);
+ return adj + theme.panel().border().left() + theme.panel().border().right();
+ }
+
+ @Override
+ public XElement getHeaderElem(XElement parent) {
+ return parent.selectNode("." + style.header());
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder sb) {
+ sb.append(template.render(style));
+ }
+
+ @Override
+ public IconConfig collapseIcon() {
+ return ToolButton.UP;
+ }
+
+ @Override
+ public IconConfig expandIcon() {
+ return ToolButton.DOWN;
+ }
+
+ @Override
+ public Size getHeaderSize(XElement parent) {
+ Element head = parent.getFirstChildElement();
+ return new Size(head.getOffsetWidth(), head.getOffsetHeight());
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3FramedPanel.css b/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3FramedPanel.css
new file mode 100644
index 0000000..d727ed1
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3FramedPanel.css
@@ -0,0 +1,56 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def borderRadius value('theme.framedPanel.borderRadius','px');
+@def borderWidth value('theme.framedPanel.border');
+@def borderColor value('theme.framedPanel.border.color');
+@def borderStyle value('theme.framedPanel.border.style');
+@def headerBackgroundColor value('theme.framedPanel.headerBackgroundColor');
+@def headerGradient value('theme.framedPanel.headerGradient');
+@def headerPadding value('theme.framedPanel.headerPadding.toString');
+@def backgroundColor value('theme.framedPanel.backgroundColor');
+
+.panel {
+ border-radius: borderRadius;
+
+ border-width: borderWidth;
+ border-style: borderStyle;
+ background-color: backgroundColor;
+ border-color: borderColor;
+
+ padding: 0;
+ overflow:hidden;
+}
+
+.body {
+ border: none;
+}
+
+.noHeader {
+
+}
+
+.header {
+ background: -webkit-linear-gradient(top, headerGradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, headerGradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, headerGradient); /* IE10+ */
+ background: linear-gradient(to bottom, headerGradient); /* W3C */
+
+ padding: headerPadding;
+}
+
+.body {
+
+}
+
+.footer {
+
+}
+
+.bodyWrap {
+ position:relative;
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3FramedPanel.html b/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3FramedPanel.html
new file mode 100644
index 0000000..f5649e5
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3FramedPanel.html
@@ -0,0 +1,7 @@
+
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3FramedPanelAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3FramedPanelAppearance.java
new file mode 100644
index 0000000..46059d8
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3FramedPanelAppearance.java
@@ -0,0 +1,145 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.panel;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.core.client.XTemplates;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.core.client.resources.StyleInjectorHelper;
+import com.sencha.gxt.core.client.util.Size;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.theme.neptune.client.base.panel.Css3ContentPanelAppearance.ThemeDetailsBundle;
+import com.sencha.gxt.widget.core.client.FramedPanel.FramedPanelAppearance;
+import com.sencha.gxt.widget.core.client.Header.HeaderAppearance;
+import com.sencha.gxt.widget.core.client.button.IconButton.IconConfig;
+import com.sencha.gxt.widget.core.client.button.ToolButton;
+
+public class Css3FramedPanelAppearance implements FramedPanelAppearance {
+
+ public interface Css3FramedPanelResources extends ClientBundle {
+ @Source("Css3FramedPanel.css")
+ Css3FramedPanelStyle style();
+
+ ThemeDetails theme();
+ }
+
+ public interface FramedPanelTemplate extends XTemplates {
+ @XTemplate(source = "Css3FramedPanel.html")
+ SafeHtml render(Css3FramedPanelStyle style);
+ }
+
+ public interface Css3FramedPanelStyle extends CssResource {
+ String body();
+
+ String bodyWrap();
+
+ String footer();
+
+ String header();
+
+ String panel();
+
+ String noHeader();
+ }
+
+ private Css3FramedPanelResources resources;
+ private Css3FramedPanelStyle style;
+ private final FramedPanelTemplate template;
+ protected final ThemeDetails theme;
+
+ public Css3FramedPanelAppearance() {
+ this(GWT. create(Css3FramedPanelResources.class),
+ GWT. create(FramedPanelTemplate.class));
+ }
+
+ public Css3FramedPanelAppearance(Css3FramedPanelResources resources, FramedPanelTemplate template) {
+ this.resources = resources;
+ this.style = this.resources.style();
+ this.template = template;
+
+ StyleInjectorHelper.ensureInjected(this.style, true);
+
+ ThemeDetailsBundle bundle = GWT.create(ThemeDetailsBundle.class);
+ this.theme = bundle.theme();
+ }
+
+ @Override
+ public int getFrameHeight(XElement parent) {
+ return Math.max(theme.framedPanel().borderRadius(), theme.framedPanel().border().top())
+ + Math.max(theme.framedPanel().borderRadius(), theme.framedPanel().border().bottom());
+ }
+
+ @Override
+ public int getFrameWidth(XElement parent) {
+ return Math.max(theme.framedPanel().borderRadius(), theme.framedPanel().border().left())
+ + Math.max(theme.framedPanel().borderRadius(), theme.framedPanel().border().right());
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder sb) {
+ sb.append(template.render(style));
+ }
+
+ @Override
+ public HeaderAppearance getHeaderAppearance() {
+ return new Css3HeaderAppearance();
+ }
+
+ @Override
+ public IconConfig collapseIcon() {
+ return ToolButton.UP;
+ }
+
+ @Override
+ public IconConfig expandIcon() {
+ return ToolButton.DOWN;
+ }
+
+ @Override
+ public XElement getBodyWrap(XElement parent) {
+ return parent.selectNode("." + style.bodyWrap());
+ }
+
+ @Override
+ public XElement getContentElem(XElement parent) {
+ return parent.selectNode("." + style.body());
+ }
+
+ @Override
+ public XElement getFooterElem(XElement parent) {
+ return parent.selectNode("." + style.footer());
+ }
+
+ @Override
+ public XElement getHeaderElem(XElement parent) {
+ return parent.selectNode("." + style.header());
+ }
+
+ @Override
+ public void onBodyBorder(XElement parent, boolean border) {
+ getContentElem(parent).applyStyles(!border ? "border: 0px" : "");
+ }
+
+ @Override
+ public void onHideHeader(XElement parent, boolean hide) {
+ parent.selectNode("." + style.header()).setVisible(!hide);
+ parent.setClassName(style.noHeader(), hide);
+ }
+
+ @Override
+ public Size getHeaderSize(XElement parent) {
+ Element head = parent.getFirstChildElement();
+ return new Size(head.getOffsetWidth(), head.getOffsetHeight());
+ }
+
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3Header.css b/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3Header.css
new file mode 100644
index 0000000..8dbdb17
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3Header.css
@@ -0,0 +1,24 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def textColor value('theme.panel.font.color');
+@def fontSize value('theme.panel.font.size');
+@def fontFamily value('theme.panel.font.family');
+@def fontWeight value('theme.panel.font.weight');
+
+.header {
+ padding: 0px;
+}
+
+.headerText {
+ color: textColor;
+ font-size: fontSize;
+ font-weight: fontWeight;
+ font-family: fontFamily;
+ line-height: 15px;
+ text-transform: none;
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3HeaderAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3HeaderAppearance.java
new file mode 100644
index 0000000..ea847b4
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/panel/Css3HeaderAppearance.java
@@ -0,0 +1,52 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.panel;
+
+
+import com.google.gwt.core.client.GWT;
+import com.sencha.gxt.theme.base.client.widget.HeaderDefaultAppearance;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+
+/**
+ */
+public class Css3HeaderAppearance extends HeaderDefaultAppearance {
+
+ public interface Css3HeaderStyle extends HeaderStyle {
+ @Override
+ String header();
+
+ @Override
+ String headerBar();
+
+ @Override
+ String headerHasIcon();
+
+ @Override
+ String headerIcon();
+
+ @Override
+ String headerText();
+ }
+
+ public interface Css3HeaderResources extends HeaderResources {
+
+ @Override
+ @Source({"com/sencha/gxt/theme/base/client/widget/Header.css", "Css3Header.css"})
+ Css3HeaderStyle style();
+
+ ThemeDetails theme();
+ }
+
+ public Css3HeaderAppearance() {
+ this(GWT.create(Css3HeaderResources.class));
+ }
+
+ public Css3HeaderAppearance(Css3HeaderResources resources) {
+ super(resources);
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/progressbar/Css3ProgressBar.css b/src/com/sencha/gxt/theme/neptune/client/base/progressbar/Css3ProgressBar.css
new file mode 100644
index 0000000..d873c96
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/progressbar/Css3ProgressBar.css
@@ -0,0 +1,76 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def borderWidth value('theme.progressbar.border.toString');
+@def borderColor value('theme.progressbar.border.color');
+@def borderStyle value('theme.progressbar.border.style');
+
+@def gradient value('theme.progressbar.backgroundGradient');
+
+@def textFamily value('theme.progressbar.text.family');
+@def textSize value('theme.progressbar.text.size');
+@def textWeight value('theme.progressbar.text.weight');
+@def textColor value('theme.progressbar.text.color');
+@def barTextColor value('theme.progressbar.barTextColor');
+
+@def textAlign value('theme.progressbar.textAlign');
+
+@def textPadding value('theme.progressbar.textPadding.toString');
+
+@def barGradient value('theme.progressbar.barGradient');
+
+@def barBorderWidth value('theme.progressbar.barBorder.toString');
+@def barBorderColor value('theme.progressbar.barBorder.color');
+@def barBorderStyle value('theme.progressbar.barBorder.style');
+
+
+.wrap {
+ border-width: borderWidth;
+ border-style: borderStyle;
+ border-color: borderColor;
+
+ position:relative;
+ overflow: hidden;
+
+ background: -webkit-linear-gradient(top, gradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, gradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, gradient); /* IE10+ */
+ background: linear-gradient(to bottom, gradient); /* W3C */
+}
+.bar {
+ z-index: 100;
+ width: 99%;
+ overflow: hidden;
+ position:relative;
+ top:0;
+
+ border-width: barBorderWidth;
+ border-style: barBorderStyle;
+ border-color: barBorderColor;
+
+ background: -webkit-linear-gradient(top, barGradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, barGradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, barGradient); /* IE10+ */
+ background: linear-gradient(to bottom, barGradient); /* W3C */
+}
+.text {
+ font-family: textFamily;
+ font-weight: textWeight;
+ font-size: textSize;
+ color: barTextColor;
+ text-align: textAlign;
+ padding: textPadding;
+}
+.textBack {
+ overflow:hidden;
+ z-index:99;
+ width:100%;
+ color: textColor;
+ position:absolute;
+ left:0;
+ top:0;
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/progressbar/Css3ProgressBar.html b/src/com/sencha/gxt/theme/neptune/client/base/progressbar/Css3ProgressBar.html
new file mode 100644
index 0000000..4efc648
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/progressbar/Css3ProgressBar.html
@@ -0,0 +1,6 @@
+
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/progressbar/Css3ProgressBarAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/progressbar/Css3ProgressBarAppearance.java
new file mode 100644
index 0000000..232a4cc
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/progressbar/Css3ProgressBarAppearance.java
@@ -0,0 +1,89 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.progressbar;
+
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.safecss.shared.SafeStyles;
+import com.google.gwt.safecss.shared.SafeStylesUtils;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.google.gwt.safehtml.shared.SafeHtmlUtils;
+import com.sencha.gxt.cell.core.client.ProgressBarCell.ProgressBarAppearance;
+import com.sencha.gxt.cell.core.client.ProgressBarCell.ProgressBarAppearanceOptions;
+import com.sencha.gxt.core.client.XTemplates;
+import com.sencha.gxt.core.client.resources.StyleInjectorHelper;
+import com.sencha.gxt.core.client.util.Format;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+
+public class Css3ProgressBarAppearance implements ProgressBarAppearance {
+ public interface Css3ProgressBarResources extends ClientBundle {
+
+ @Source("Css3ProgressBar.css")
+ Css3ProgressBarStyles styles();
+
+ ThemeDetails theme();
+ }
+
+ public interface Css3ProgressBarStyles extends CssResource {
+ String wrap();
+
+ String bar();
+ String text();
+ String textBack();
+ }
+
+ public interface Css3ProgressBarTemplate extends XTemplates {
+ @XTemplate(source = "Css3ProgressBar.html")
+ SafeHtml render(SafeHtml text, Css3ProgressBarStyles style, SafeStyles wrapStyles, SafeStyles progressBarStyles, SafeStyles progressTextStyles, SafeStyles widthStyles);
+ }
+
+ private final Css3ProgressBarStyles styles;
+ private final Css3ProgressBarTemplate template = GWT.create(Css3ProgressBarTemplate.class);
+
+ public Css3ProgressBarAppearance() {
+ this(GWT.create(Css3ProgressBarResources.class));
+ }
+ public Css3ProgressBarAppearance(Css3ProgressBarResources resources) {
+ styles = resources.styles();
+ StyleInjectorHelper.ensureInjected(styles, false);
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder sb, Double value, ProgressBarAppearanceOptions options) {
+ value = value == null ? 0 : value;
+
+ String text = options.getProgressText();
+
+ if (text != null) {
+ int v = (int) Math.round(value * 100);
+ text = Format.substitute(text, v);
+ }
+
+ SafeHtml txt;
+ if (text == null) {
+ txt = SafeHtmlUtils.fromSafeConstant(" ");
+ } else {
+ txt = SafeHtmlUtils.fromString(text);
+ }
+
+ SafeStyles widthStyles = SafeStylesUtils.fromTrustedNameAndValue("width", options.getWidth() + "px");
+
+ final SafeStyles progressBarStyles;
+ if (value <= 0) {
+ progressBarStyles = SafeStylesUtils.fromTrustedNameAndValue("visibility", "hidden");
+ } else {
+ progressBarStyles = SafeStylesUtils.fromTrustedNameAndValue("width", value * 100 + "%");
+ }
+
+
+ sb.append(template.render(txt, styles, null, progressBarStyles, null, widthStyles));
+
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/slider/Css3HorizontalSlider.css b/src/com/sencha/gxt/theme/neptune/client/base/slider/Css3HorizontalSlider.css
new file mode 100644
index 0000000..4ce5a1a
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/slider/Css3HorizontalSlider.css
@@ -0,0 +1,89 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def trackBackground value('theme.field.slider.trackBackgroundColor');
+@def trackHeight value('theme.field.slider.trackHeight', 'px');
+@def trackBorderColor value('theme.field.slider.trackBorder.color');
+@def trackBorderStyle value('theme.field.slider.trackBorder.style');
+@def trackBorderWidth value('theme.field.slider.trackBorder.toString');
+@def trackRadius value('theme.field.slider.trackRadius', 'px');
+
+@def thumbWidth value('theme.field.slider.thumbWidth', 'px');
+@def thumbHeight value('theme.field.slider.thumbHeight', 'px');
+@def thumbRadius value('theme.field.slider.thumbRadius', 'px');
+@def thumbBackgroundColor value('theme.field.slider.thumbBackgroundColor');
+@def thumbBorderColor value('theme.field.slider.thumbBorder.color');
+@def thumbBorderStyle value('theme.field.slider.thumbBorder.style');
+@def thumbBorderWidth value('theme.field.slider.thumbBorder.toString');
+
+
+.slider {
+ outline: 0 none;
+}
+.track {
+ background: trackBackground;
+ border-radius: trackRadius;
+
+ border-style: trackBorderStyle;
+ border-color: trackBorderColor;
+ border-width: trackBorderWidth;
+
+ width: 200px;
+ height: trackHeight;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ /*margin-bottom: 20px;*/
+ position: relative;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.thumb {
+ background: thumbBackgroundColor;
+
+ border-style: thumbBorderStyle;
+ border-color: thumbBorderColor;
+ border-width: thumbBorderWidth;
+ border-radius: thumbRadius;
+ cursor: pointer;
+ height: thumbHeight;
+ /* margin-left: calc(thumbWidth / -2); -- set by appearance */
+ position: absolute;
+ width: thumbWidth;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ z-index: 2;
+}
+
+.thumbCenter {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ background-color: thumbBorderColor;
+ border-radius: thumbRadius;
+ position: absolute;
+ height: 50%;
+ width: 50%;
+ left: 25%;
+ top: 25%;
+ z-index: 3;
+}
+
+.over .thumb {
+ -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
+ -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
+}
+
+.drag .thumb {
+ -webkit-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.6);
+ -moz-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.6);
+ box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.6);
+}
+
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/slider/Css3HorizontalSliderAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/slider/Css3HorizontalSliderAppearance.java
new file mode 100644
index 0000000..94b13c2
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/slider/Css3HorizontalSliderAppearance.java
@@ -0,0 +1,212 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.slider;
+
+import com.google.gwt.cell.client.Cell.Context;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.Style.Unit;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.safecss.shared.SafeStyles;
+import com.google.gwt.safecss.shared.SafeStylesBuilder;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.cell.core.client.SliderCell.HorizontalSliderAppearance;
+import com.sencha.gxt.core.client.XTemplates;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.core.client.resources.StyleInjectorHelper;
+import com.sencha.gxt.core.client.util.Point;
+import com.sencha.gxt.theme.neptune.client.FieldDetails;
+import com.sencha.gxt.theme.neptune.client.SliderDetails;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+
+/**
+ *
+ */
+public class Css3HorizontalSliderAppearance implements HorizontalSliderAppearance {
+
+ public interface Css3HorizontalSliderResources extends ClientBundle {
+ @Source("Css3HorizontalSlider.css")
+ Css3HorizontalSliderStyle style();
+
+ ThemeDetails theme();
+ }
+
+ public interface Css3HorizontalSliderStyle extends CssResource {
+ String slider();
+
+ String drag();
+
+ String over();
+
+ String track();
+
+ String thumb();
+
+ String thumbCenter();
+ }
+
+ public interface Css3HorizontalSliderTemplate extends XTemplates {
+ @XTemplate(source = "Css3Slider.html")
+ SafeHtml render(Css3HorizontalSliderStyle style, SafeStyles sliderStyle, SafeStyles trackStyle, SafeStyles thumbStyle, SafeStyles thumbCenterStyle);
+ }
+
+ private Css3HorizontalSliderResources resources;
+ private Css3HorizontalSliderStyle style;
+ protected Css3HorizontalSliderTemplate template;
+
+ public Css3HorizontalSliderAppearance() {
+ this(GWT.create(Css3HorizontalSliderResources.class));
+ }
+
+ public Css3HorizontalSliderAppearance(Css3HorizontalSliderResources resources) {
+ this(resources, GWT.create(Css3HorizontalSliderTemplate.class));
+ }
+
+ public Css3HorizontalSliderAppearance(Css3HorizontalSliderResources resources, Css3HorizontalSliderTemplate template) {
+ this.resources = resources;
+ this.template = template;
+ this.style = resources.style();
+
+ StyleInjectorHelper.ensureInjected(style, true);
+ }
+
+ @Override
+ public int getClickedValue(Context context, Element parent, Point location) {
+ XElement track = getTrack(parent);
+ return location.getX() - track.getLeft(false) - (resources.theme().field().slider().thumbWidth());
+ }
+
+ @Override
+ public int getSliderLength(XElement parent) {
+ SliderDetails sliderDetails = resources.theme().field().slider();
+ return getTrack(parent).getOffsetWidth() - sliderDetails.thumbWidth();
+ }
+
+ @Override
+ public Element getThumb(Element parent) {
+ return parent.cast().selectNode("." + style.thumb());
+ }
+
+ @Override
+ public boolean isVertical() {
+ return false;
+ }
+
+ @Override
+ public void onEmpty(Element parent, boolean empty) {
+ // Not possible to "empty" a slider
+ }
+
+ @Override
+ public void onFocus(Element parent, boolean focus) {
+ // No visible effect on focussing
+ }
+
+ @Override
+ public void onMouseDown(Context context, Element parent) {
+ parent.addClassName(style.drag());
+ }
+
+ @Override
+ public void onMouseOut(Context context, Element parent) {
+ parent.removeClassName(style.over());
+ }
+
+ @Override
+ public void onMouseOver(Context context, Element parent) {
+ parent.addClassName(style.over());
+ }
+
+ @Override
+ public void onMouseUp(Context context, Element parent) {
+ parent.removeClassName(style.drag());
+ }
+
+ @Override
+ public void onValid(Element parent, boolean valid) {
+ // Always valid
+ }
+
+ @Override
+ public void setReadOnly(Element parent, boolean readonly) {
+ // TODO Not currently disableable
+ }
+
+
+ @Override
+ public void render(double fractionalValue, int width, int height, SafeHtmlBuilder sb) {
+ if (width == -1) {
+ // default
+ width = 200;
+ }
+
+ FieldDetails fieldDetails = resources.theme().field();
+
+ int thumbWidth = fieldDetails.slider().thumbWidth();
+ int thumbHeight = fieldDetails.slider().thumbHeight();
+
+ int fieldHeight = Math.max(fieldDetails.height(), thumbHeight);
+ fieldHeight = Math.max(fieldHeight, fieldDetails.slider().trackHeight());
+
+ int halfThumbWidth = thumbWidth / 2;
+ int maxTrackLength = width - thumbWidth;
+
+ int offset = (int) (fractionalValue * maxTrackLength) - halfThumbWidth;
+ offset = Math.max(-halfThumbWidth, offset);
+ offset = Math.min(maxTrackLength + halfThumbWidth, offset);
+
+ SafeStylesBuilder sliderStyleBuilder = new SafeStylesBuilder();
+ sliderStyleBuilder.appendTrustedString("width:" + width + "px;");
+ sliderStyleBuilder.appendTrustedString("height:" + fieldHeight + "px;");
+
+
+ SafeStylesBuilder trackStyleBuilder = new SafeStylesBuilder();
+ trackStyleBuilder.appendTrustedString("width: " + width + "px;");
+ trackStyleBuilder.appendTrustedString("top:" + ((fieldHeight - fieldDetails.slider().trackHeight()) / 2) + "px;");
+
+ SafeStylesBuilder thumbStyleBuilder = new SafeStylesBuilder();
+ thumbStyleBuilder.appendTrustedString("left:" + offset + "px;");
+ int thumbTop = ((fieldDetails.slider().trackHeight() - thumbHeight) / 2)
+ - (fieldDetails.slider().trackBorder().top() + fieldDetails.slider().trackBorder().bottom());
+ thumbStyleBuilder.appendTrustedString("top:" + thumbTop + "px;");
+ thumbStyleBuilder.appendTrustedString("margin-left:" + halfThumbWidth + "px;");
+
+
+ SafeStylesBuilder thumbCenterStyleBuilder = new SafeStylesBuilder();
+ updateThumbCenterStyle(thumbCenterStyleBuilder, "left", "width", thumbWidth,
+ fieldDetails.slider().thumbBorder().left(), fieldDetails.slider().thumbBorder().right());
+ updateThumbCenterStyle(thumbCenterStyleBuilder, "top", "height", thumbHeight,
+ fieldDetails.slider().thumbBorder().top(), fieldDetails.slider().thumbBorder().bottom());
+
+ sb.append(template.render(resources.style(), sliderStyleBuilder.toSafeStyles(),
+ trackStyleBuilder.toSafeStyles(), thumbStyleBuilder.toSafeStyles(), thumbCenterStyleBuilder.toSafeStyles()));
+ }
+
+ @Override
+ public void setThumbPosition(Element parent, int pos) {
+ XElement thumbElement = XElement.as(getThumb(parent));
+ int halfThumbSize = resources.theme().field().slider().thumbWidth() / 2;
+ pos = Math.max(-halfThumbSize, pos);
+ thumbElement.getStyle().setLeft(pos, Unit.PX);
+ }
+
+ protected XElement getTrack(Element parent) {
+ return parent.cast().selectNode("." + style.track());
+ }
+
+ protected void updateThumbCenterStyle(SafeStylesBuilder style, String position, String dimension, int full, int border1, int border2) {
+ int remainingArea = full - (border1 + border2);
+ int margin = remainingArea / 4;
+ int size = remainingArea - (margin * 2);
+
+ style.appendTrustedString(position + ":" + margin + "px;");
+ style.appendTrustedString(dimension + ":" + size + "px;");
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/slider/Css3Slider.html b/src/com/sencha/gxt/theme/neptune/client/base/slider/Css3Slider.html
new file mode 100644
index 0000000..9cbd9fc
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/slider/Css3Slider.html
@@ -0,0 +1,7 @@
+
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/slider/Css3VerticalSlider.css b/src/com/sencha/gxt/theme/neptune/client/base/slider/Css3VerticalSlider.css
new file mode 100644
index 0000000..352a4cc
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/slider/Css3VerticalSlider.css
@@ -0,0 +1,41 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+
+@def trackHeight value('theme.field.slider.trackHeight', 'px');
+
+/* rotated sides due to orientation */
+@def thumbWidth value('theme.field.slider.thumbHeight', 'px');
+@def thumbHeight value('theme.field.slider.thumbWidth', 'px');
+
+@def trackBorderTop value('theme.field.slider.trackBorder.left', 'px');
+@def trackBorderRight value('theme.field.slider.trackBorder.top', 'px');
+@def trackBorderBottom value('theme.field.slider.trackBorder.right', 'px');
+@def trackBorderLeft value('theme.field.slider.trackBorder.bottom', 'px');
+
+@def thumbBorderTop value('theme.field.slider.thumbBorder.left', 'px');
+@def thumbBorderRight value('theme.field.slider.thumbBorder.top', 'px');
+@def thumbBorderBottom value('theme.field.slider.thumbBorder.right', 'px');
+@def thumbBorderLeft value('theme.field.slider.thumbBorder.bottom', 'px');
+
+.track {
+ width: trackHeight;
+ border-top-width: trackBorderTop;
+ border-right-width: trackBorderRight;
+ border-bottom-width: trackBorderBottom;
+ border-left-width: trackBorderLeft;
+ height: 200px;
+}
+
+.thumb {
+ border-top-width: thumbBorderTop;
+ border-right-width: thumbBorderRight;
+ border-bottom-width: thumbBorderBottom;
+ border-left-width: thumbBorderLeft;
+ height: thumbHeight;
+ width: thumbWidth;
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/slider/Css3VerticalSliderAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/slider/Css3VerticalSliderAppearance.java
new file mode 100644
index 0000000..3051c09
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/slider/Css3VerticalSliderAppearance.java
@@ -0,0 +1,123 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.slider;
+
+import com.google.gwt.cell.client.Cell.Context;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.Style.Unit;
+import com.google.gwt.safecss.shared.SafeStylesBuilder;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.cell.core.client.SliderCell.VerticalSliderAppearance;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.core.client.util.Point;
+import com.sencha.gxt.theme.neptune.client.FieldDetails;
+import com.sencha.gxt.theme.neptune.client.SliderDetails;
+
+/**
+ *
+ */
+public class Css3VerticalSliderAppearance extends Css3HorizontalSliderAppearance implements VerticalSliderAppearance {
+ public interface Css3VerticalSliderResources extends Css3HorizontalSliderResources {
+ @Source({"Css3HorizontalSlider.css", "Css3VerticalSlider.css"})
+ Css3VerticalSliderStyle style();
+ }
+
+ public interface Css3VerticalSliderStyle extends Css3HorizontalSliderStyle {
+ }
+
+ private final Css3VerticalSliderResources resources;
+
+ public Css3VerticalSliderAppearance() {
+ this(GWT.create(Css3VerticalSliderResources.class));
+ }
+
+ public Css3VerticalSliderAppearance(Css3VerticalSliderResources resources) {
+ this(resources, GWT.create(Css3HorizontalSliderTemplate.class));
+ }
+
+ public Css3VerticalSliderAppearance(Css3VerticalSliderResources resources, Css3HorizontalSliderTemplate template) {
+ super(resources, template);
+ this.resources = resources;
+ }
+
+ @Override
+ public int getClickedValue(Context context, Element parent, Point location) {
+ XElement track = getTrack(parent);
+ return location.getY() - track.getTop(false) - (resources.theme().field().slider().thumbWidth() / 2);
+ }
+
+ @Override
+ public int getSliderLength(XElement parent) {
+ SliderDetails sliderDetails = resources.theme().field().slider();
+ return getTrack(parent).getOffsetHeight() - sliderDetails.thumbWidth();
+ }
+
+ @Override
+ public boolean isVertical() {
+ return true;
+ }
+
+ @Override
+ public void render(double fractionalValue, int width, int height, SafeHtmlBuilder sb) {
+ if (height == -1) {
+ // default
+ height = 200;
+ }
+
+ FieldDetails fieldDetails = resources.theme().field();
+
+ int thumbWidth = fieldDetails.slider().thumbWidth();
+ int thumbHeight = fieldDetails.slider().thumbHeight();
+
+ int fieldWidth = Math.max(fieldDetails.height(), fieldDetails.slider().thumbHeight());
+ fieldWidth = Math.max(fieldWidth, fieldDetails.slider().trackHeight());
+
+ int halfThumbWidth = thumbWidth / 2;
+ int maxTrackLength = height - thumbWidth;
+
+ int offset = (int) (fractionalValue * maxTrackLength) - halfThumbWidth;
+ offset = Math.max(-halfThumbWidth, offset);
+ offset = Math.min(maxTrackLength + halfThumbWidth, offset);
+
+ SafeStylesBuilder sliderStyleBuilder = new SafeStylesBuilder();
+ sliderStyleBuilder.appendTrustedString("height:" + height + "px;");
+ sliderStyleBuilder.appendTrustedString("width:" + fieldWidth + "px;");
+
+
+ SafeStylesBuilder trackStyleBuilder = new SafeStylesBuilder();
+ trackStyleBuilder.appendTrustedString("height: " + height + "px;");
+ trackStyleBuilder.appendTrustedString("left:" + ((fieldWidth - fieldDetails.slider().trackHeight()) / 2) + "px;");
+
+ SafeStylesBuilder thumbStyleBuilder = new SafeStylesBuilder();
+ thumbStyleBuilder.appendTrustedString("bottom:" + offset + "px;");
+ // reversed width/height due to orientation
+ int thumbLeft = ((fieldDetails.slider().trackHeight() - thumbHeight) / 2)
+ - (fieldDetails.slider().trackBorder().top() + fieldDetails.slider().trackBorder().bottom());
+ thumbStyleBuilder.appendTrustedString("left:" + thumbLeft + "px;");
+ thumbStyleBuilder.appendTrustedString("margin-bottom:" + halfThumbWidth + "px;");
+
+ SafeStylesBuilder thumbCenterStyleBuilder = new SafeStylesBuilder();
+ updateThumbCenterStyle(thumbCenterStyleBuilder, "top", "height", thumbWidth,
+ fieldDetails.slider().thumbBorder().left(), fieldDetails.slider().thumbBorder().right());
+ updateThumbCenterStyle(thumbCenterStyleBuilder, "left", "width", thumbHeight,
+ fieldDetails.slider().thumbBorder().top(), fieldDetails.slider().thumbBorder().bottom());
+
+
+ sb.append(template.render(resources.style(), sliderStyleBuilder.toSafeStyles(),
+ trackStyleBuilder.toSafeStyles(), thumbStyleBuilder.toSafeStyles(), thumbCenterStyleBuilder.toSafeStyles()));
+ }
+
+ @Override
+ public void setThumbPosition(Element parent, int pos) {
+ XElement thumbElement = XElement.as(getThumb(parent));
+ int halfThumbSize = resources.theme().field().slider().thumbWidth() / 2;
+ pos = Math.max(-halfThumbSize, pos);
+ thumbElement.getStyle().setBottom(pos, Unit.PX);
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/status/Css3BoxStatus.css b/src/com/sencha/gxt/theme/neptune/client/base/status/Css3BoxStatus.css
new file mode 100644
index 0000000..4c2adc7
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/status/Css3BoxStatus.css
@@ -0,0 +1,48 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def textColor value('theme.status.text.color');
+@def textSize value('theme.status.text.size');
+@def textFamily value('theme.status.text.family');
+@def textWeight value('theme.status.text.weight');
+
+@def lineHeight value('theme.status.lineHeight');
+
+@def borderWidth value('theme.status.border.toString');
+@def borderColor value('theme.status.border.color');
+@def borderStyle value('theme.status.border.style');
+
+@def padding value('theme.status.padding.toString');
+
+.status {
+ height: 21px;
+ line-height: lineHeight;
+ cursor: default;
+ padding: padding;
+}
+
+.status .statusText {
+ line-height: lineHeight;
+ font-size: textSize;
+ font-family: textFamily;
+ font-weight: textWeight;
+ color: textColor;
+}
+
+.status .statusIcon {
+ display: none;
+ width: 18px;
+ float: left;
+ padding-top: 2px;
+}
+
+
+.statusBox {
+ border-width: borderWidth;
+ border-style: borderStyle;
+ border-color: borderColor;
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/status/Css3BoxStatusAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/status/Css3BoxStatusAppearance.java
new file mode 100644
index 0000000..03c3ce0
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/status/Css3BoxStatusAppearance.java
@@ -0,0 +1,34 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.status;
+
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.sencha.gxt.theme.base.client.status.BoxStatusBaseAppearance;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.Status.BoxStatusAppearance;
+
+public class Css3BoxStatusAppearance extends BoxStatusBaseAppearance implements BoxStatusAppearance {
+
+ public interface Css3BoxStatusResources extends BoxStatusResources, ClientBundle {
+ @Override
+ @Source("Css3BoxStatus.css")
+ Css3BoxStatusStyle style();
+
+ ThemeDetails theme();
+ }
+
+ public interface Css3BoxStatusStyle extends BoxStatusStyle {
+
+ }
+
+ public Css3BoxStatusAppearance() {
+ super(GWT.create(Css3BoxStatusResources.class),
+ GWT.create(BoxTemplate.class));
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/status/Css3Status.css b/src/com/sencha/gxt/theme/neptune/client/base/status/Css3Status.css
new file mode 100644
index 0000000..239a8fb
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/status/Css3Status.css
@@ -0,0 +1,37 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def textColor value('theme.status.text.color');
+@def textSize value('theme.status.text.size');
+@def textFamily value('theme.status.text.family');
+@def textWeight value('theme.status.text.weight');
+
+@def lineHeight value('theme.status.lineHeight');
+
+@def padding value('theme.status.padding.toString');
+
+.status {
+ height: 21px;
+ line-height: lineHeight;
+ cursor: default;
+ padding: padding;
+}
+
+.status .statusText {
+ line-height: lineHeight;
+ font-size: textSize;
+ font-family: textFamily;
+ font-weight: textWeight;
+ color: textColor;
+}
+
+.status .statusIcon {
+ display: none;
+ width: 18px;
+ float: left;
+ padding-top: 2px;
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/status/Css3StatusAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/status/Css3StatusAppearance.java
new file mode 100644
index 0000000..dc49b7a
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/status/Css3StatusAppearance.java
@@ -0,0 +1,29 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.status;
+
+import com.google.gwt.core.shared.GWT;
+import com.sencha.gxt.theme.base.client.status.StatusDefaultAppearance;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+
+public class Css3StatusAppearance extends StatusDefaultAppearance {
+ public interface Css3StatusResources extends StatusResources {
+ @Override
+ @Source("Css3Status.css")
+ Css3StatusStyles style();
+
+ ThemeDetails theme();
+ }
+ public interface Css3StatusStyles extends StatusStyle {
+
+ }
+
+ public Css3StatusAppearance() {
+ super(GWT.create(Css3StatusResources.class), GWT.create(Template.class));
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/statusproxy/Css3StatusProxy.css b/src/com/sencha/gxt/theme/neptune/client/base/statusproxy/Css3StatusProxy.css
new file mode 100644
index 0000000..0a7bd84
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/statusproxy/Css3StatusProxy.css
@@ -0,0 +1,70 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def textFamily value('theme.statusproxy.text.family');
+@def textWeight value('theme.statusproxy.text.weight');
+@def textSize value('theme.statusproxy.text.size');
+@def textColor value('theme.statusproxy.text.color');
+
+@def borderWidth value('theme.statusproxy.border.toString');
+@def borderColor value('theme.statusproxy.border.color');
+@def borderStyle value('theme.statusproxy.border.style');
+
+@def backgroundColor value('theme.statusproxy.backgroundColor');
+
+@def opacity value('theme.statusproxy.opacity');
+@eval ieFilterOpacity com.sencha.gxt.themebuilder.base.client.CssResourceThemeUtils.opacityToIe8Filter(theme().info().opacity());
+
+.proxy {
+ position: absolute;
+ left: 0;
+ top: 0;
+ visibility: hidden;
+ z-index: 15000;
+}
+
+.dragGhost {
+ font-family: textFamily;
+ font-weight: textWeight;
+ font-size: textSize;
+ color: textColor;
+
+ border-width: borderWidth;
+ border-style: borderStyle;
+ border-color: borderColor;
+ background-color: backgroundColor;
+
+ padding: 3px;
+ padding-left: 20px;
+ white-space: nowrap;
+}
+
+@if user.agent ie8 {
+ .dragGhost {
+ filter: ieFilterOpacity;
+ }
+} @else {
+ .dragGhost {
+ opacity: opacity;
+ }
+}
+
+.dropIcon {
+ position: absolute;
+ top: 3px;
+ left: 3px;
+ display: block;
+ z-index: 1;
+}
+
+@sprite .dropDisallowed .dropIcon {
+ gwt-image: "dropNotAllowed";
+}
+
+@sprite .dropAllowed .dropIcon {
+ gwt-image: "dropAllowed";
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/statusproxy/Css3StatusProxyAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/statusproxy/Css3StatusProxyAppearance.java
new file mode 100644
index 0000000..35f8135
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/statusproxy/Css3StatusProxyAppearance.java
@@ -0,0 +1,37 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.statusproxy;
+
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.ImageResource;
+import com.sencha.gxt.theme.base.client.statusproxy.StatusProxyBaseAppearance;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+
+public class Css3StatusProxyAppearance extends StatusProxyBaseAppearance {
+ public interface Css3StatusProxyResources extends StatusProxyResources, ClientBundle {
+ @Override
+ @Source({"com/sencha/gxt/theme/base/client/statusproxy/StatusProxy.css", "Css3StatusProxy.css"})
+ Css3StatusProxyStyle style();
+
+ @Override
+ ImageResource dropAllowed();
+
+ @Override
+ ImageResource dropNotAllowed();
+
+ ThemeDetails theme();
+ }
+ public interface Css3StatusProxyStyle extends StatusProxyStyle {
+
+ }
+
+ public Css3StatusProxyAppearance() {
+ super(GWT.create(Css3StatusProxyResources.class), GWT.create(StatusProxyTemplates.class));
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/statusproxy/dropAllowed.png b/src/com/sencha/gxt/theme/neptune/client/base/statusproxy/dropAllowed.png
new file mode 100644
index 0000000..418c21d
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/statusproxy/dropAllowed.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/statusproxy/dropNotAllowed.png b/src/com/sencha/gxt/theme/neptune/client/base/statusproxy/dropNotAllowed.png
new file mode 100644
index 0000000..b35e7fa
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/statusproxy/dropNotAllowed.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3BigTabPanel.css b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3BigTabPanel.css
new file mode 100644
index 0000000..9dac9f4
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3BigTabPanel.css
@@ -0,0 +1,321 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def borderColor value('theme.tabs.borderColor');
+@def bodyBackgroundColor value('theme.tabs.bodyBackgroundColor');
+/*@def cornerRadius value('theme.tabs.borderRadius', 'px');*/
+
+@def cornerRadius 8px;
+@def tabItemMarginTop 2px;
+@def lastStopColor value('theme.tabs.lastStopColor');
+@def headerGradient value('theme.tabs.gradient');
+@def hoverGradient value('theme.tabs.hoverGradient');
+@def inactiveHeaderGradient value('theme.tabs.inactiveGradient');
+@def tabStripGradient value('theme.tabs.tabStripGradient');
+
+@def headingTextColor value('theme.tabs.headingText.color');
+@def headingTextSize value('theme.tabs.headingText.size');
+@def headingTextWeight value('theme.tabs.headingText.weight');
+@def headingTextFont value('theme.tabs.headingText.family');
+
+@def hoverHeadingTextColor value('theme.tabs.hoverHeadingText.color');
+@def hoverTextSize value('theme.tabs.hoverHeadingText.size');
+@def hoverHeadingTextWeight value('theme.tabs.hoverHeadingText.weight');
+@def hoverHeadingTextFont value('theme.tabs.hoverHeadingText.family');
+
+@def activeHeadingTextColor value('theme.tabs.activeHeadingText.color');
+@def activeHeadingTextSize value('theme.tabs.activeHeadingText.size');
+@def activeHeadingTextWeight value('theme.tabs.activeHeadingText.weight');
+@def activeHeadingTextFont value('theme.tabs.activeHeadingText.family');
+
+@def tabLeftPadding value('theme.tabs.padding.left', 'px');
+
+/*@def tabLeftPaddingIcon value('theme.tabs.paddingWithIcon.left', 'px');*//*extra space for icon, default to 16px for icon*/
+
+
+@def tabLeftPaddingIcon 50px;
+
+@def tabRightPadding value('theme.tabs.padding.right', 'px');
+@def tabRightPaddingClosable value('theme.tabs.paddingWithClosable.right', 'px');/*extra space for close icon*/
+
+@def tabIconLeftOffset value('theme.tabs.iconLeftOffset', 'px');
+@def tabIconTopOffset value('theme.tabs.iconTopOffset', 'px');
+
+@def scrollerBackgroundColor value('theme.tabs.scrollerBackgroundColor');
+@def scrollerWidth value('theme.tabs.scrollerWidth', 'px');
+
+/*
+@def tabHeight value('theme.tabs.tabHeight', 'px');
+*/
+@def tabHeight 56px;
+@def tabSpacing value('theme.tabs.tabSpacing', 'px');
+
+@def tabItemBorderLeft value('theme.tabs.tabItemBorderLeft');
+@def tabItemBorderTop value('theme.tabs.tabItemBorderTop');
+@def tabItemBorderRight value('theme.tabs.tabItemBorderRight');
+
+@def tabStripPaddingTop value('theme.tabs.tabStripPadding.top','px');
+@def tabBarBorder value('theme.tabs.tabBarBorder');
+@def tabBarBottomHeight value('theme.tabs.tabBarBottomHeight', 'px');
+@def tabStripBottomBorder value('theme.tabs.tabStripBottomBorder');
+@def tabBodyBorder value('theme.tabs.tabBodyBorder');
+@def tabTextPadding value('theme.tabs.tabTextPadding.toString');
+@def tabTexPaddingTop 16px;
+
+.tab {
+ overflow: hidden;
+ outline: none;
+}
+
+.tabBar {
+ background-color: lastStopColor;
+ border: tabBarBorder;
+ overflow: hidden;
+ padding-bottom: tabBarBottomHeight;
+}
+
+.tabStripWrap {
+ background: -webkit-linear-gradient(top, tabStripGradient); /* Chrome10+,Safari5.1+ */
+ background: linear-gradient(to bottom, tabStripGradient); /* W3C */
+ width: 100%;
+ overflow: hidden;
+ position: relative;
+ padding-top: tabStripPaddingTop;
+}
+
+.tabStrip {
+ display: block;
+ /* widths great than this in ie8 causes north / south resize handles to have white background when tab panel put into window */
+ /* width: 65520px; */
+ whidth: auto;
+ float: left;
+
+ background: repeat-x bottom;
+ border-bottom: tabStripBottomBorder;
+}
+
+li.tabItem {
+ float: left;
+ position: relative;
+ margin-right: tabSpacing;
+ height: tabHeight;
+ cursor: pointer;
+}
+
+.tabStripActive.tabItem {
+ cursor: default;
+}
+
+.tabStrip li.tabEdge {
+ float: left;
+ margin: 0 !important;
+ padding: 0 !important;
+ border: 0 none !important;
+ font-size: 1px !important;
+ line-height: 1px !important;
+ overflow: hidden;
+ background: transparent !important;
+ width: 1px;
+}
+
+.tabStrip a, .tabStrip span, .tabStrip em {
+ display: block;
+}
+
+.tabStrip a {
+ text-decoration: none !important;
+ cursor: pointer;
+ outline: none;
+}
+
+.tabStripInner {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.tabStripText {
+ font: normal headingTextWeight headingTextSize headingTextFont;
+ color: headingTextColor;
+ white-space: nowrap;
+ cursor: pointer;
+ padding: tabTextPadding;
+ padding-top: tabTexPaddingTop;
+
+
+}
+
+.tabWithIcon .tabStripText {
+ padding-left: tabLeftPaddingIcon;
+ background-position: 0 3px;
+ background-repeat: no-repeat;
+}
+
+.tabStripActive, .tabStripActive a.tabRight {
+ cursor: default;
+}
+.tabStripOver .tabStripText {
+ font: normal hoverHeadingTextWeight hoverHeadingTextSize hoverHeadingTextFont;
+ color: hoverHeadingTextColor;
+}
+
+.tabStripActive .tabStripText {
+ cursor: default;
+ margin-bottom: -1px;
+ font: normal activeHeadingTextWeight activeHeadingTextSize activeHeadingTextFont;
+ color: activeHeadingTextColor;
+}
+
+@sprite .tabStrip .tabStripClosable a.tabStripClose {
+ gwt-image: "tabClose";
+}
+
+@sprite .tabStrip .tabStripClosable a.tabStripClose:hover {
+ gwt-image: "tabCloseOver";
+}
+
+.tabBody {
+ overflow: hidden;
+ background-color: bodyBackgroundColor;
+}
+
+.tabStripActive .tabRight {
+ margin-bottom: -1px;
+}
+
+.tabStripActive .tabStripText {
+ padding-bottom: 5px;
+}
+
+.tabStrip .tabStripClose {
+ display: none;
+}
+
+.tabStripClosable .tabStripClose {
+ background-repeat: no-repeat;
+ display: block;
+ width: 11px;
+ height: 11px;
+ position: absolute;
+ top: 3px;
+ right: 3px;
+ cursor: pointer;
+ z-index: 2;
+}
+
+.tabStripClosable .tabStripClose {
+ opacity: 0.6;
+}
+
+.tabStripActive .tabStripClose {
+ opacity: .8;
+}
+
+.tabStripClosable .tabStripClose:hover {
+ opacity: 1;
+}
+
+.tabBody {
+ border: tabBodyBorder;
+ border-top: 0 none;
+}
+
+.tabScrolling .tabStripWrap {
+ margin-left: scrollerWidth;
+ margin-right: scrollerWidth;
+}
+
+.tabScrolling {
+ position: relative;
+}
+
+.tabImage {
+ position: absolute;
+
+ top: tabIconTopOffset;
+ left: tabIconLeftOffset;
+}
+
+.tabStripOver.tabItem {
+ background: -webkit-linear-gradient(top, hoverGradient); /* Chrome10+,Safari5.1+ */
+ background: linear-gradient(to bottom, hoverGradient); /* W3C */
+
+ margin-bottom: -1px;
+ border-bottom: 1px solid lastStopColor;
+}
+
+.tabStripActive.tabItem {
+ background: -webkit-linear-gradient(top, headerGradient); /* Chrome10+,Safari5.1+ */
+ background: linear-gradient(to bottom, headerGradient); /* W3C */
+
+ margin-bottom: -1px;
+ border-bottom: 1px solid lastStopColor;
+}
+
+.tabItem {
+ border-top-left-radius: cornerRadius;
+ border-top-right-radius: cornerRadius;
+ border-top: tabItemBorderTop;
+ border-left: tabItemBorderLeft;
+ border-right: tabItemBorderRight;
+
+ margin-top: tabItemMarginTop;
+
+ padding-left: tabLeftPadding;
+ padding-right: tabRightPadding;
+
+ background: -webkit-linear-gradient(top, inactiveHeaderGradient); /* Chrome10+,Safari5.1+ */
+ background: linear-gradient(to bottom, inactiveHeaderGradient); /* W3C */
+}
+.tabItem.tabStripClosable {
+ padding-right: tabRightPaddingClosable;
+}
+
+@sprite .tabScrollerLeft {
+ gwt-image: "scrollerLeft";
+ width: scrollerWidth;
+ background-position: center;
+ background-color: scrollerBackgroundColor;
+
+
+
+ border: none;
+
+ position: absolute;
+ left: 0;
+ top: 0;
+ z-index: 10;
+ cursor: pointer;
+}
+
+.tabScrollerLeftOver {
+ opacity: .7;
+}
+
+@sprite .tabScrollerRight {
+ gwt-image: "scrollerRight";
+ width: scrollerWidth;
+
+ background-position: center;
+ background-color: scrollerBackgroundColor;
+
+ border: none;
+
+ position: absolute;
+ right: 0;
+ top: 0;
+ z-index: 10;
+ cursor: pointer;
+}
+
+.tabScrollerLeftDisabled, .tabScrollerRightDisabled {
+ cursor: default;
+ opacity: .7;
+}
+
+.tabScrollerRightOver {
+ opacity: .7;
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3BigTabPanel.html b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3BigTabPanel.html
new file mode 100644
index 0000000..96f9032
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3BigTabPanel.html
@@ -0,0 +1,11 @@
+
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3BigTabPanelAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3BigTabPanelAppearance.java
new file mode 100644
index 0000000..0b0c13d
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3BigTabPanelAppearance.java
@@ -0,0 +1,314 @@
+package com.sencha.gxt.theme.neptune.client.base.tabs;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.NodeList;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.core.client.XTemplates;
+import com.sencha.gxt.core.client.dom.XDOM;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.core.client.resources.StyleInjectorHelper;
+import com.sencha.gxt.core.client.resources.ThemeStyles;
+import com.sencha.gxt.core.client.util.IconHelper;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.TabItemConfig;
+import com.sencha.gxt.widget.core.client.TabPanel.TabPanelAppearance;
+
+/**
+ *
+ */
+public class Css3BigTabPanelAppearance implements TabPanelAppearance {
+
+ public interface ItemTemplate extends XTemplates {
+ @XTemplate(source = "Css3BigTabPanelTabItem.html")
+ SafeHtml render(Css3TabPanelStyle style, TabItemConfig config);
+ }
+
+ public interface Css3BigTabPanelResources extends ClientBundle {
+ @Source("Css3BigTabPanel.css")
+ Css3TabPanelStyle style();
+
+ ThemeDetails theme();
+
+ ImageResource tabClose();
+
+ ImageResource tabCloseOver();
+
+ ImageResource scrollerLeft();
+
+ ImageResource scrollerRight();
+ }
+
+ public interface Css3TabPanelStyle extends CssResource {
+ /** the entire tab panel */
+ String tab();
+
+ /** contents of the tab panel */
+ String tabBody();
+
+ String tabEdge();
+
+ /** tab bar, when above the body */
+ String tabBar();
+
+ /** icon element inside a tab item */
+ String tabImage();
+
+ /** the tab item itself */
+ String tabItem();
+
+ String tabRight();
+
+ String tabScrollerLeft();
+
+ String tabScrollerLeftDisabled();
+
+ String tabScrollerLeftOver();
+
+ String tabScrollerRight();
+
+ String tabScrollerRightDisabled();
+
+ String tabScrollerRightOver();
+
+ String tabScrolling();
+
+ String tabStrip();
+
+ /** marker on the tab item that it is active */
+ String tabStripActive();
+
+ /** marker on the tab item that it may be closed */
+ String tabStripClosable();
+
+ /** close icon within a tab item, may not be visible */
+ String tabStripClose();
+
+ String tabStripInner();
+
+ /** marker on the tab item that it is hovered */
+ String tabStripOver();
+
+ /** text element inside the tab item */
+ String tabStripText();
+
+ String tabStripWrap();
+
+ /** extra marker on the tab item to indicate that there is an icon */
+ String tabWithIcon();
+ }
+
+ public interface Css3TabPanelTemplates extends XTemplates {
+ @XTemplate(source = "Css3BigTabPanel.html")
+ SafeHtml render(Css3TabPanelStyle style);
+ }
+
+ protected ItemTemplate itemTemplate = GWT. create(ItemTemplate.class);
+ protected final Css3TabPanelStyle style;
+ protected Css3TabPanelTemplates template;
+
+ private static final String ITEM_SELECTOR = "li";
+
+ public Css3BigTabPanelAppearance() {
+ this(GWT. create(Css3BigTabPanelResources.class));
+ }
+
+ public Css3BigTabPanelAppearance(Css3BigTabPanelResources resources) {
+ this(resources, GWT. create(Css3TabPanelTemplates.class));
+ }
+
+ public Css3BigTabPanelAppearance(Css3BigTabPanelResources resources, Css3TabPanelTemplates template) {
+ this.style = resources.style();
+ this.template = template;
+
+ StyleInjectorHelper.ensureInjected(this.style, true);
+ }
+
+ @Override
+ public void createScrollers(XElement parent) {
+ int h = getStripWrap(parent).getOffsetHeight();
+ XElement scrollLeft = getBar(parent).insertFirst("");
+ scrollLeft.setId(XDOM.getUniqueId());
+ scrollLeft.setHeight(h);
+
+ XElement scrollRight = getBar(parent).insertFirst("");
+ scrollRight.setId(XDOM.getUniqueId());
+ scrollRight.setHeight(h);
+ }
+
+ @Override
+ public XElement getBar(XElement parent) {
+ return parent.getFirstChildElement().cast();
+ }
+
+ @Override
+ public XElement getBody(XElement parent) {
+ return parent.selectNode("." + style.tabBody());
+ }
+
+ @Override
+ public String getItemSelector() {
+ return ITEM_SELECTOR;
+ }
+
+ @Override
+ public XElement getScrollLeft(XElement parent) {
+ return getBar(parent).selectNode("." + style.tabScrollerLeft());
+ }
+
+ @Override
+ public XElement getScrollRight(XElement parent) {
+ return getBar(parent).selectNode("." + style.tabScrollerRight());
+ }
+
+ public XElement getStrip(XElement parent) {
+ return parent.selectNode("." + style.tabStrip());
+ }
+
+ @Override
+ public XElement getStripEdge(XElement parent) {
+ return parent.selectNode("." + style.tabEdge());
+ }
+
+ @Override
+ public XElement getStripWrap(XElement parent) {
+ return parent.selectNode("." + style.tabStripWrap());
+ }
+
+ @Override
+ public void insert(XElement parent, TabItemConfig config, int index) {
+ XElement item = XDOM.create(itemTemplate.render(style, config).asString());
+ item.setClassName(ThemeStyles.get().style().disabled(), !config.isEnabled());
+
+ if (config.isHTML()) {
+ XElement textEl = item.selectNode("." + style.tabStripText());
+ textEl.setInnerHTML(config.getHTML());
+ }
+
+ getStrip(parent).insertChild(item, index);
+
+ if (config.getIcon() != null) {
+ setItemIcon(item, config.getIcon());
+ }
+
+ if (config.isClosable()) {
+ item.addClassName(style.tabStripClosable());
+ }
+ }
+
+ @Override
+ public boolean isClose(XElement target) {
+ return target.is("." + style.tabStripClose());
+ }
+
+ @Override
+ public void onDeselect(Element item) {
+ item.removeClassName(style.tabStripActive());
+ }
+
+ @Override
+ public void onMouseOut(XElement parent, XElement target) {
+ NodeList nodeList = parent.select("." + style.tabStripOver());
+ for (int i = 0; i < nodeList.getLength(); i++) {
+ nodeList.getItem(i).removeClassName(style.tabStripOver());
+ }
+ if (target.is("." + style.tabScrollerLeft())) {
+ target.removeClassName(style.tabScrollerLeftOver());
+ } else if (target.is("." + style.tabScrollerRight())) {
+ target.removeClassName(style.tabScrollerRightOver());
+ }
+ }
+
+ @Override
+ public void onMouseOver(XElement parent, XElement target) {
+ Element item = findItem(target);
+ if (item != null) {
+ item.addClassName(style.tabStripOver());
+ } else if (target.is("." + style.tabScrollerLeft())) {
+ target.addClassName(style.tabScrollerLeftOver());
+ } else if (target.is("." + style.tabScrollerRight())) {
+ target.addClassName(style.tabScrollerRightOver());
+ }
+ }
+
+ @Override
+ public void onScrolling(XElement parent, boolean scrolling) {
+ parent.selectNode("." + style.tabBar()).setClassName(style.tabScrolling(), scrolling);
+ }
+
+ @Override
+ public void onSelect(Element item) {
+ item.addClassName(style.tabStripActive());
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder builder) {
+ builder.append(template.render(style));
+ }
+
+ @Override
+ public void setItemWidth(XElement element, int width) {
+ XElement inner = element.selectNode("." + style.tabStripInner());
+ int tw = element.getOffsetWidth();
+ int iw = inner.getOffsetWidth();
+ inner.setWidth(width - (tw - iw));
+ }
+
+ @Override
+ public void updateItem(XElement item, TabItemConfig config) {
+ XElement textEl = item.selectNode("." + style.tabStripText());
+
+ if (config.isHTML()) {
+ textEl.setInnerHTML(config.getHTML());
+ } else {
+ textEl.setInnerText(config.getText());
+ }
+
+ setItemIcon(item, config.getIcon());
+
+ item.setClassName(ThemeStyles.get().style().disabled(), !config.isEnabled());
+
+ item.setClassName(style.tabStripClosable(), config.isClosable());
+ }
+
+ @Override
+ public void updateScrollButtons(XElement parent) {
+ int pos = getScrollPos(parent);
+ getScrollLeft(parent).setClassName(style.tabScrollerLeftDisabled(), pos == 0);
+ getScrollRight(parent).setClassName(style.tabScrollerRightDisabled(),
+ pos >= (getScrollWidth(parent) - getScrollArea(parent) - 2));
+ }
+
+ protected Element findItem(Element target) {
+ return target. cast().findParentElement(ITEM_SELECTOR, -1);
+ }
+
+ protected void setItemIcon(XElement item, ImageResource icon) {
+ XElement node = item.selectNode("." + style.tabImage());
+ if (node != null) {
+ node.removeFromParent();
+ }
+ if (icon != null) {
+ Element e = IconHelper.getElement(icon);
+ e.setClassName(style.tabImage());
+ item.appendChild(e);
+ }
+ item.setClassName(style.tabWithIcon(), icon != null);
+ }
+
+ private int getScrollPos(XElement parent) {
+ return getStripWrap(parent).getScrollLeft();
+ }
+
+ private int getScrollArea(XElement parent) {
+ return Math.max(0, getStripWrap(parent).getClientWidth());
+ }
+
+ private int getScrollWidth(XElement parent) {
+ return getStripEdge(parent).getOffsetsTo(getStripWrap(parent)).getX() + getScrollPos(parent);
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3BigTabPanelTabItem.html b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3BigTabPanelTabItem.html
new file mode 100644
index 0000000..200d08b
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3BigTabPanelTabItem.html
@@ -0,0 +1,4 @@
+
+
+ {config.text}
+
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3PlainTabPanel.css b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3PlainTabPanel.css
new file mode 100644
index 0000000..c7da786
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3PlainTabPanel.css
@@ -0,0 +1,31 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def tabStripSpacerBackground value('theme.tabs.lastStopColor');
+@def borderColor value('theme.tabs.borderColor');
+
+.tabBar {
+ background: transparent;
+ padding-top: 0;
+ padding-bottom: 0px;
+ border-width: 0;
+ border-bottom: 1px;
+}
+
+.tabStripWrap {
+ background: transparent;
+ height: auto;
+}
+
+.tabBar .tabStripSpacer {
+ border: 1px solid borderColor;
+ height: 2px;
+ font-size: 1px;
+ line-height: 1px;
+ background-color: tabStripSpacerBackground;
+ border-top: 0 none;
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3PlainTabPanel.html b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3PlainTabPanel.html
new file mode 100644
index 0000000..28e85f7
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3PlainTabPanel.html
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3PlainTabPanelAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3PlainTabPanelAppearance.java
new file mode 100644
index 0000000..fedfdf7
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3PlainTabPanelAppearance.java
@@ -0,0 +1,58 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.tabs;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.widget.core.client.PlainTabPanel.PlainTabPanelAppearance;
+
+/**
+ *
+ */
+public class Css3PlainTabPanelAppearance extends Css3TabPanelAppearance implements PlainTabPanelAppearance {
+
+ public interface Css3PlainTabPanelResources extends Css3TabPanelResources {
+ @Override
+ @Source({"Css3TabPanel.css", "Css3PlainTabPanel.css"})
+ Css3PlainTabPanelStyle style();
+ }
+
+ public interface Css3PlainTabPanelStyle extends Css3TabPanelStyle {
+
+ String tabStripSpacer();
+ }
+
+ public interface Css3PlainTabPanelTemplates extends Css3TabPanelTemplates {
+ @Override
+ @XTemplate(source = "Css3TabPanel.html")
+ SafeHtml render(Css3TabPanelStyle style);
+
+ @XTemplate(source = "Css3PlainTabPanel.html")
+ SafeHtml renderPlain(Css3PlainTabPanelStyle style);
+ }
+
+ private final Css3PlainTabPanelTemplates template;
+ private final Css3PlainTabPanelStyle style;
+
+ public Css3PlainTabPanelAppearance() {
+ this(GWT.create(Css3PlainTabPanelResources.class),
+ GWT.create(Css3PlainTabPanelTemplates.class));
+ }
+
+ public Css3PlainTabPanelAppearance(Css3PlainTabPanelResources resources, Css3PlainTabPanelTemplates template) {
+ super(resources, template);
+ this.style = resources.style();
+ this.template = template;
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder builder) {
+ builder.append(template.renderPlain(style));
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3PlainTabPanelBottom.css b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3PlainTabPanelBottom.css
new file mode 100644
index 0000000..1b98297
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3PlainTabPanelBottom.css
@@ -0,0 +1,31 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def tabStripSpacerBackground value('theme.tabs.lastStopColor');
+@def borderColor value('theme.tabs.borderColor');
+
+.tabBar {
+ background: transparent;
+ padding-top: 0px;
+ padding-bottom: 0px;
+ border-width: 0px;
+ border-top: 1px;
+}
+
+.tabStripWrap {
+ background: transparent;
+ height: auto;
+}
+
+.tabBar .tabStripSpacer {
+ border: 1px solid borderColor;
+ height: 2px;
+ font-size: 1px;
+ line-height: 1px;
+ background-color: tabStripSpacerBackground;
+ border-bottom: 0 none;
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3PlainTabPanelBottom.html b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3PlainTabPanelBottom.html
new file mode 100644
index 0000000..a8f2d1d
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3PlainTabPanelBottom.html
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3PlainTabPanelBottomAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3PlainTabPanelBottomAppearance.java
new file mode 100644
index 0000000..55fde1c
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3PlainTabPanelBottomAppearance.java
@@ -0,0 +1,57 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.tabs;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.core.client.XTemplates;
+import com.sencha.gxt.widget.core.client.PlainTabPanel.PlainTabPanelBottomAppearance;
+
+/**
+ *
+ */
+public class Css3PlainTabPanelBottomAppearance extends Css3TabPanelBottomAppearance implements PlainTabPanelBottomAppearance {
+
+ public interface Css3PlainTabPanelBottomResources extends Css3TabPanelBottomResources {
+ @Override
+ @Source({"Css3TabPanelBottom.css", "Css3PlainTabPanelBottom.css"})
+ Css3PlainTabPanelBottomStyle style();
+ }
+
+ public interface Css3PlainTabPanelBottomStyle extends Css3TabPanelBottomStyle {
+ String tabStripSpacer();
+ }
+
+ public interface Css3PlainTabPanelBottomTemplates extends XTemplates {
+ @XTemplate(source = "Css3PlainTabPanelBottom.html")
+ SafeHtml render(Css3PlainTabPanelBottomStyle style);
+ }
+
+ private final Css3PlainTabPanelBottomTemplates template;
+ private final Css3PlainTabPanelBottomStyle style;
+
+ public Css3PlainTabPanelBottomAppearance() {
+ this(GWT.create(Css3PlainTabPanelBottomResources.class));
+ }
+
+ public Css3PlainTabPanelBottomAppearance(Css3PlainTabPanelBottomResources resources) {
+ this(resources, GWT.create(Css3PlainTabPanelBottomTemplates.class));
+ }
+
+ public Css3PlainTabPanelBottomAppearance(Css3PlainTabPanelBottomResources resources, Css3PlainTabPanelBottomTemplates template) {
+ super(resources);
+ this.style = resources.style();
+ this.template = template;
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder builder) {
+ builder.append(template.render(style));
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3TabPanel.css b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3TabPanel.css
new file mode 100644
index 0000000..3a0af34
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3TabPanel.css
@@ -0,0 +1,303 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def borderColor value('theme.tabs.borderColor');
+@def bodyBackgroundColor value('theme.tabs.bodyBackgroundColor');
+@def cornerRadius value('theme.tabs.borderRadius', 'px');
+@def lastStopColor value('theme.tabs.lastStopColor');
+@def headerGradient value('theme.tabs.gradient');
+@def hoverGradient value('theme.tabs.hoverGradient');
+@def inactiveHeaderGradient value('theme.tabs.inactiveGradient');
+@def tabStripGradient value('theme.tabs.tabStripGradient');
+
+@def headingTextColor value('theme.tabs.headingText.color');
+@def headingTextSize value('theme.tabs.headingText.size');
+@def headingTextWeight value('theme.tabs.headingText.weight');
+@def headingTextFont value('theme.tabs.headingText.family');
+
+@def hoverHeadingTextColor value('theme.tabs.hoverHeadingText.color');
+@def hoverTextSize value('theme.tabs.hoverHeadingText.size');
+@def hoverHeadingTextWeight value('theme.tabs.hoverHeadingText.weight');
+@def hoverHeadingTextFont value('theme.tabs.hoverHeadingText.family');
+
+@def activeHeadingTextColor value('theme.tabs.activeHeadingText.color');
+@def activeHeadingTextSize value('theme.tabs.activeHeadingText.size');
+@def activeHeadingTextWeight value('theme.tabs.activeHeadingText.weight');
+@def activeHeadingTextFont value('theme.tabs.activeHeadingText.family');
+
+@def tabLeftPadding value('theme.tabs.padding.left', 'px');
+@def tabLeftPaddingIcon value('theme.tabs.paddingWithIcon.left', 'px');/*extra space for icon, default to 16px for icon*/
+@def tabRightPadding value('theme.tabs.padding.right', 'px');
+@def tabRightPaddingClosable value('theme.tabs.paddingWithClosable.right', 'px');/*extra space for close icon*/
+
+@def tabIconLeftOffset value('theme.tabs.iconLeftOffset', 'px');
+@def tabIconTopOffset value('theme.tabs.iconTopOffset', 'px');
+
+@def scrollerBackgroundColor value('theme.tabs.scrollerBackgroundColor');
+@def scrollerWidth value('theme.tabs.scrollerWidth', 'px');
+
+@def tabHeight value('theme.tabs.tabHeight', 'px');
+@def tabSpacing value('theme.tabs.tabSpacing', 'px');
+
+@def tabItemBorderLeft value('theme.tabs.tabItemBorderLeft');
+@def tabItemBorderTop value('theme.tabs.tabItemBorderTop');
+@def tabItemBorderRight value('theme.tabs.tabItemBorderRight');
+
+@def tabStripPaddingTop value('theme.tabs.tabStripPadding.top','px');
+@def tabBarBorder value('theme.tabs.tabBarBorder');
+@def tabBarBottomHeight value('theme.tabs.tabBarBottomHeight', 'px');
+@def tabStripBottomBorder value('theme.tabs.tabStripBottomBorder');
+@def tabBodyBorder value('theme.tabs.tabBodyBorder');
+@def tabTextPadding value('theme.tabs.tabTextPadding.toString');
+
+
+.tab {
+ overflow: hidden;
+ outline: none;
+}
+
+.tabBar {
+ background-color: lastStopColor;
+ border: tabBarBorder;
+ overflow: hidden;
+ padding-bottom: tabBarBottomHeight;
+}
+
+.tabStripWrap {
+ background: -webkit-linear-gradient(top, tabStripGradient); /* Chrome10+,Safari5.1+ */
+ background: linear-gradient(to bottom, tabStripGradient); /* W3C */
+ width: 100%;
+ overflow: hidden;
+ position: relative;
+ padding-top: tabStripPaddingTop;
+}
+
+.tabStrip {
+ display: block;
+ /* widths great than this in ie8 causes north / south resize handles to have white background when tab panel put into window */
+ width: 65520px;
+
+ background: repeat-x bottom;
+ border-bottom: tabStripBottomBorder;
+}
+
+li.tabItem {
+ float: left;
+ position: relative;
+ margin-right: tabSpacing;
+ height: tabHeight;
+ cursor: pointer;
+}
+
+.tabStripActive.tabItem {
+ cursor: default;
+}
+
+.tabStrip li.tabEdge {
+ float: left;
+ margin: 0 !important;
+ padding: 0 !important;
+ border: 0 none !important;
+ font-size: 1px !important;
+ line-height: 1px !important;
+ overflow: hidden;
+ background: transparent !important;
+ width: 1px;
+}
+
+.tabStrip a, .tabStrip span, .tabStrip em {
+ display: block;
+}
+
+.tabStrip a {
+ text-decoration: none !important;
+ cursor: pointer;
+ outline: none;
+}
+
+.tabStripInner {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.tabStripText {
+ font: normal headingTextWeight headingTextSize headingTextFont;
+ color: headingTextColor;
+ white-space: nowrap;
+ cursor: pointer;
+ padding: tabTextPadding;
+}
+
+.tabWithIcon .tabStripText {
+ padding-left: tabLeftPaddingIcon;
+ background-position: 0 3px;
+ background-repeat: no-repeat;
+}
+
+.tabStripActive, .tabStripActive a.tabRight {
+ cursor: default;
+}
+.tabStripOver .tabStripText {
+ font: normal hoverHeadingTextWeight hoverHeadingTextSize hoverHeadingTextFont;
+ color: hoverHeadingTextColor;
+}
+
+.tabStripActive .tabStripText {
+ cursor: default;
+ margin-bottom: -1px;
+ font: normal activeHeadingTextWeight activeHeadingTextSize activeHeadingTextFont;
+ color: activeHeadingTextColor;
+}
+
+@sprite .tabStrip .tabStripClosable a.tabStripClose {
+ gwt-image: "tabClose";
+}
+
+@sprite .tabStrip .tabStripClosable a.tabStripClose:hover {
+ gwt-image: "tabCloseOver";
+}
+
+.tabBody {
+ overflow: hidden;
+ background-color: bodyBackgroundColor;
+}
+
+.tabStripActive .tabRight {
+ margin-bottom: -1px;
+}
+
+.tabStripActive .tabStripText {
+ padding-bottom: 5px;
+}
+
+.tabStrip .tabStripClose {
+ display: none;
+}
+
+.tabStripClosable .tabStripClose {
+ background-repeat: no-repeat;
+ display: block;
+ width: 11px;
+ height: 11px;
+ position: absolute;
+ top: 3px;
+ right: 3px;
+ cursor: pointer;
+ z-index: 2;
+}
+
+.tabStripClosable .tabStripClose {
+ opacity: 0.6;
+}
+
+.tabStripActive .tabStripClose {
+ opacity: .8;
+}
+
+.tabStripClosable .tabStripClose:hover {
+ opacity: 1;
+}
+
+.tabBody {
+ border: tabBodyBorder;
+ border-top: 0 none;
+}
+
+.tabScrolling .tabStripWrap {
+ margin-left: scrollerWidth;
+ margin-right: scrollerWidth;
+}
+
+.tabScrolling {
+ position: relative;
+}
+
+.tabImage {
+ position: absolute;
+
+ top: tabIconTopOffset;
+ left: tabIconLeftOffset;
+}
+
+.tabStripOver.tabItem {
+ background: -webkit-linear-gradient(top, hoverGradient); /* Chrome10+,Safari5.1+ */
+ background: linear-gradient(to bottom, hoverGradient); /* W3C */
+
+ margin-bottom: -1px;
+ border-bottom: 1px solid lastStopColor;
+}
+
+.tabStripActive.tabItem {
+ background: -webkit-linear-gradient(top, headerGradient); /* Chrome10+,Safari5.1+ */
+ background: linear-gradient(to bottom, headerGradient); /* W3C */
+
+ margin-bottom: -1px;
+ border-bottom: 1px solid lastStopColor;
+}
+
+.tabItem {
+ border-top-left-radius: cornerRadius;
+ border-top-right-radius: cornerRadius;
+ border-top: tabItemBorderTop;
+ border-left: tabItemBorderLeft;
+ border-right: tabItemBorderRight;
+
+ padding-left: tabLeftPadding;
+ padding-right: tabRightPadding;
+
+ background: -webkit-linear-gradient(top, inactiveHeaderGradient); /* Chrome10+,Safari5.1+ */
+ background: linear-gradient(to bottom, inactiveHeaderGradient); /* W3C */
+}
+.tabItem.tabStripClosable {
+ padding-right: tabRightPaddingClosable;
+}
+
+@sprite .tabScrollerLeft {
+ gwt-image: "scrollerLeft";
+ width: scrollerWidth;
+ background-position: center;
+ background-color: scrollerBackgroundColor;
+
+
+
+ border: none;
+
+ position: absolute;
+ left: 0;
+ top: 0;
+ z-index: 10;
+ cursor: pointer;
+}
+
+.tabScrollerLeftOver {
+ opacity: .7;
+}
+
+@sprite .tabScrollerRight {
+ gwt-image: "scrollerRight";
+ width: scrollerWidth;
+
+ background-position: center;
+ background-color: scrollerBackgroundColor;
+
+ border: none;
+
+ position: absolute;
+ right: 0;
+ top: 0;
+ z-index: 10;
+ cursor: pointer;
+}
+
+.tabScrollerLeftDisabled, .tabScrollerRightDisabled {
+ cursor: default;
+ opacity: .7;
+}
+
+.tabScrollerRightOver {
+ opacity: .7;
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3TabPanel.html b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3TabPanel.html
new file mode 100644
index 0000000..96f9032
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3TabPanel.html
@@ -0,0 +1,11 @@
+
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3TabPanelAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3TabPanelAppearance.java
new file mode 100644
index 0000000..79696f6
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3TabPanelAppearance.java
@@ -0,0 +1,321 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.tabs;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.NodeList;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.core.client.XTemplates;
+import com.sencha.gxt.core.client.dom.XDOM;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.core.client.resources.StyleInjectorHelper;
+import com.sencha.gxt.core.client.resources.ThemeStyles;
+import com.sencha.gxt.core.client.util.IconHelper;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.TabItemConfig;
+import com.sencha.gxt.widget.core.client.TabPanel.TabPanelAppearance;
+
+/**
+ *
+ */
+public class Css3TabPanelAppearance implements TabPanelAppearance {
+
+ public interface ItemTemplate extends XTemplates {
+ @XTemplate(source = "Css3TabPanelTabItem.html")
+ SafeHtml render(Css3TabPanelStyle style, TabItemConfig config);
+ }
+
+ public interface Css3TabPanelResources extends ClientBundle {
+ @Source("Css3TabPanel.css")
+ Css3TabPanelStyle style();
+
+ ThemeDetails theme();
+
+ ImageResource tabClose();
+
+ ImageResource tabCloseOver();
+
+ ImageResource scrollerLeft();
+
+ ImageResource scrollerRight();
+ }
+
+ public interface Css3TabPanelStyle extends CssResource {
+ /** the entire tab panel */
+ String tab();
+
+ /** contents of the tab panel */
+ String tabBody();
+
+ String tabEdge();
+
+ /** tab bar, when above the body */
+ String tabBar();
+
+ /** icon element inside a tab item */
+ String tabImage();
+
+ /** the tab item itself */
+ String tabItem();
+
+ String tabRight();
+
+ String tabScrollerLeft();
+
+ String tabScrollerLeftDisabled();
+
+ String tabScrollerLeftOver();
+
+ String tabScrollerRight();
+
+ String tabScrollerRightDisabled();
+
+ String tabScrollerRightOver();
+
+ String tabScrolling();
+
+ String tabStrip();
+
+ /** marker on the tab item that it is active */
+ String tabStripActive();
+
+ /** marker on the tab item that it may be closed */
+ String tabStripClosable();
+
+ /** close icon within a tab item, may not be visible */
+ String tabStripClose();
+
+ String tabStripInner();
+
+ /** marker on the tab item that it is hovered */
+ String tabStripOver();
+
+ /** text element inside the tab item */
+ String tabStripText();
+
+ String tabStripWrap();
+
+ /** extra marker on the tab item to indicate that there is an icon */
+ String tabWithIcon();
+ }
+
+ public interface Css3TabPanelTemplates extends XTemplates {
+ @XTemplate(source = "Css3TabPanel.html")
+ SafeHtml render(Css3TabPanelStyle style);
+ }
+
+ protected ItemTemplate itemTemplate = GWT. create(ItemTemplate.class);
+ protected final Css3TabPanelStyle style;
+ protected Css3TabPanelTemplates template;
+
+ private static final String ITEM_SELECTOR = "li";
+
+ public Css3TabPanelAppearance() {
+ this(GWT. create(Css3TabPanelResources.class));
+ }
+
+ public Css3TabPanelAppearance(Css3TabPanelResources resources) {
+ this(resources, GWT. create(Css3TabPanelTemplates.class));
+ }
+
+ public Css3TabPanelAppearance(Css3TabPanelResources resources, Css3TabPanelTemplates template) {
+ this.style = resources.style();
+ this.template = template;
+
+ StyleInjectorHelper.ensureInjected(this.style, true);
+ }
+
+ @Override
+ public void createScrollers(XElement parent) {
+ int h = getStripWrap(parent).getOffsetHeight();
+ XElement scrollLeft = getBar(parent).insertFirst("");
+ scrollLeft.setId(XDOM.getUniqueId());
+ scrollLeft.setHeight(h);
+
+ XElement scrollRight = getBar(parent).insertFirst("");
+ scrollRight.setId(XDOM.getUniqueId());
+ scrollRight.setHeight(h);
+ }
+
+ @Override
+ public XElement getBar(XElement parent) {
+ return parent.getFirstChildElement().cast();
+ }
+
+ @Override
+ public XElement getBody(XElement parent) {
+ return parent.selectNode("." + style.tabBody());
+ }
+
+ @Override
+ public String getItemSelector() {
+ return ITEM_SELECTOR;
+ }
+
+ @Override
+ public XElement getScrollLeft(XElement parent) {
+ return getBar(parent).selectNode("." + style.tabScrollerLeft());
+ }
+
+ @Override
+ public XElement getScrollRight(XElement parent) {
+ return getBar(parent).selectNode("." + style.tabScrollerRight());
+ }
+
+ public XElement getStrip(XElement parent) {
+ return parent.selectNode("." + style.tabStrip());
+ }
+
+ @Override
+ public XElement getStripEdge(XElement parent) {
+ return parent.selectNode("." + style.tabEdge());
+ }
+
+ @Override
+ public XElement getStripWrap(XElement parent) {
+ return parent.selectNode("." + style.tabStripWrap());
+ }
+
+ @Override
+ public void insert(XElement parent, TabItemConfig config, int index) {
+ XElement item = XDOM.create(itemTemplate.render(style, config).asString());
+ item.setClassName(ThemeStyles.get().style().disabled(), !config.isEnabled());
+
+ if (config.isHTML()) {
+ XElement textEl = item.selectNode("." + style.tabStripText());
+ textEl.setInnerHTML(config.getHTML());
+ }
+
+ getStrip(parent).insertChild(item, index);
+
+ if (config.getIcon() != null) {
+ setItemIcon(item, config.getIcon());
+ }
+
+ if (config.isClosable()) {
+ item.addClassName(style.tabStripClosable());
+ }
+ }
+
+ @Override
+ public boolean isClose(XElement target) {
+ return target.is("." + style.tabStripClose());
+ }
+
+ @Override
+ public void onDeselect(Element item) {
+ item.removeClassName(style.tabStripActive());
+ }
+
+ @Override
+ public void onMouseOut(XElement parent, XElement target) {
+ NodeList nodeList = parent.select("." + style.tabStripOver());
+ for (int i = 0; i < nodeList.getLength(); i++) {
+ nodeList.getItem(i).removeClassName(style.tabStripOver());
+ }
+ if (target.is("." + style.tabScrollerLeft())) {
+ target.removeClassName(style.tabScrollerLeftOver());
+ } else if (target.is("." + style.tabScrollerRight())) {
+ target.removeClassName(style.tabScrollerRightOver());
+ }
+ }
+
+ @Override
+ public void onMouseOver(XElement parent, XElement target) {
+ Element item = findItem(target);
+ if (item != null) {
+ item.addClassName(style.tabStripOver());
+ } else if (target.is("." + style.tabScrollerLeft())) {
+ target.addClassName(style.tabScrollerLeftOver());
+ } else if (target.is("." + style.tabScrollerRight())) {
+ target.addClassName(style.tabScrollerRightOver());
+ }
+ }
+
+ @Override
+ public void onScrolling(XElement parent, boolean scrolling) {
+ parent.selectNode("." + style.tabBar()).setClassName(style.tabScrolling(), scrolling);
+ }
+
+ @Override
+ public void onSelect(Element item) {
+ item.addClassName(style.tabStripActive());
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder builder) {
+ builder.append(template.render(style));
+ }
+
+ @Override
+ public void setItemWidth(XElement element, int width) {
+ XElement inner = element.selectNode("." + style.tabStripInner());
+ int tw = element.getOffsetWidth();
+ int iw = inner.getOffsetWidth();
+ inner.setWidth(width - (tw - iw));
+ }
+
+ @Override
+ public void updateItem(XElement item, TabItemConfig config) {
+ XElement textEl = item.selectNode("." + style.tabStripText());
+
+ if (config.isHTML()) {
+ textEl.setInnerHTML(config.getHTML());
+ } else {
+ textEl.setInnerText(config.getText());
+ }
+
+ setItemIcon(item, config.getIcon());
+
+ item.setClassName(ThemeStyles.get().style().disabled(), !config.isEnabled());
+
+ item.setClassName(style.tabStripClosable(), config.isClosable());
+ }
+
+ @Override
+ public void updateScrollButtons(XElement parent) {
+ int pos = getScrollPos(parent);
+ getScrollLeft(parent).setClassName(style.tabScrollerLeftDisabled(), pos == 0);
+ getScrollRight(parent).setClassName(style.tabScrollerRightDisabled(),
+ pos >= (getScrollWidth(parent) - getScrollArea(parent) - 2));
+ }
+
+ protected Element findItem(Element target) {
+ return target. cast().findParentElement(ITEM_SELECTOR, -1);
+ }
+
+ protected void setItemIcon(XElement item, ImageResource icon) {
+ XElement node = item.selectNode("." + style.tabImage());
+ if (node != null) {
+ node.removeFromParent();
+ }
+ if (icon != null) {
+ Element e = IconHelper.getElement(icon);
+ e.setClassName(style.tabImage());
+ item.appendChild(e);
+ }
+ item.setClassName(style.tabWithIcon(), icon != null);
+ }
+
+ private int getScrollPos(XElement parent) {
+ return getStripWrap(parent).getScrollLeft();
+ }
+
+ private int getScrollArea(XElement parent) {
+ return Math.max(0, getStripWrap(parent).getClientWidth());
+ }
+
+ private int getScrollWidth(XElement parent) {
+ return getStripEdge(parent).getOffsetsTo(getStripWrap(parent)).getX() + getScrollPos(parent);
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3TabPanelBottom.css b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3TabPanelBottom.css
new file mode 100644
index 0000000..72dda32
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3TabPanelBottom.css
@@ -0,0 +1,312 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def borderColor value('theme.tabs.borderColor');
+@def cornerRadius value('theme.tabs.borderRadius', 'px');
+@def lastStopColor value('theme.tabs.lastStopColor');
+@def headerGradient value('theme.tabs.gradient');
+@def inactiveHeaderGradient value('theme.tabs.inactiveGradient');
+@def tabStripGradient value('theme.tabs.tabStripGradient');
+
+@def headingTextColor value('theme.tabs.headingText.color');
+@def headingTextSize value('theme.tabs.headingText.size');
+@def headingTextWeight value('theme.tabs.headingText.weight');
+@def headingTextFont value('theme.tabs.headingText.family');
+
+@def activeHeadingTextColor value('theme.tabs.activeHeadingText.color');
+@def activeHeadingTextSize value('theme.tabs.activeHeadingText.size');
+@def activeHeadingTextWeight value('theme.tabs.activeHeadingText.weight');
+@def activeHeadingTextFont value('theme.tabs.activeHeadingText.family');
+
+@def tabLeftPadding value('theme.tabs.padding.left', 'px');
+@def tabLeftPaddingIcon value('theme.tabs.paddingWithIcon.left', 'px');/*extra space for icon, default to 16px for icon*/
+@def tabRightPadding value('theme.tabs.padding.right', 'px');
+@def tabRightPaddingClosable value('theme.tabs.paddingWithClosable.right', 'px');/*extra space for close icon*/
+
+@def tabIconLeftOffset value('theme.tabs.iconLeftOffset', 'px');
+@def tabIconTopOffset value('theme.tabs.iconTopOffset', 'px');
+
+@def scrollerWidth value('theme.tabs.scrollerWidth', 'px');
+
+@def tabHeight value('theme.tabs.tabHeight', 'px');
+@def tabSpacing value('theme.tabs.tabSpacing', 'px');
+
+@def tabItemBorderLeft value('theme.tabs.tabItemBorderLeft');
+@def tabItemBorderTop value('theme.tabs.tabItemBorderTop');
+@def tabItemBorderRight value('theme.tabs.tabItemBorderRight');
+
+@def tabStripPaddingTop value('theme.tabs.tabStripPadding.top','px');
+@def tabBarBorder value('theme.tabs.tabBarBorder');
+@def tabBarBottomHeight value('theme.tabs.tabBarBottomHeight', 'px');
+@def tabStripBottomBorder value('theme.tabs.tabStripBottomBorder');
+@def tabBodyBorder value('theme.tabs.tabBodyBorder');
+@def tabTextPadding value('theme.tabs.tabTextPadding.toString');
+
+.tab {
+ overflow: hidden;
+ outline: none;
+}
+
+.tabBar {
+ background-color: lastStopColor;
+ border: tabBarBorder;
+ overflow: hidden;
+ padding-top: tabBarBottomHeight;
+}
+
+.tabStripWrap {
+ background: -webkit-linear-gradient(bottom, tabStripGradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(bottom, tabStripGradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(bottom, tabStripGradient); /* IE10+ */
+ background: linear-gradient(to top, tabStripGradient); /* W3C */
+
+ width: 100%;
+ overflow: hidden;
+ position: relative;
+ padding-bottom: tabStripPaddingTop;
+}
+
+.tabStrip {
+ display: block;
+ /* widths great than this in ie8 causes north / south resize handles to have white background when tab panel put into window */
+ width: 65520px;
+
+ background: repeat-x top;
+ border-top: tabStripBottomBorder;
+ border-bottom: 0 none;
+}
+
+li.tabItem {
+ float: left;
+ position: relative;
+ margin-right: tabSpacing;
+ height: tabHeight;
+ cursor: pointer;
+}
+
+.tabStripActive.tabItem {
+ cursor: default;
+}
+
+.tabStrip li.tabEdge {
+ float: left;
+ margin: 0 !important;
+ padding: 0 !important;
+ border: 0 none !important;
+ font-size: 1px !important;
+ line-height: 1px !important;
+ overflow: hidden;
+ background: transparent !important;
+ width: 1px;
+}
+
+.tabStrip a, .tabStrip span, .tabStrip em {
+ display: block;
+}
+
+.tabStrip a {
+ text-decoration: none !important;
+ cursor: pointer;
+ outline: none;
+}
+
+.tabStripInner {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.tabStripText {
+ font: normal headingTextWeight headingTextSize headingTextFont;
+ white-space: nowrap;
+ cursor: pointer;
+ padding: tabTextPadding;
+}
+
+.tabWithIcon .tabStripText {
+ padding-left: tabLeftPaddingIcon;
+ background-position: 0 3px;
+ background-repeat: no-repeat;
+}
+
+.tabStripActive, .tabStripActive a.tabRight {
+ cursor: default;
+}
+
+.tabStripActive span.tabStripText {
+ cursor: default;
+ margin-top: -1px;
+}
+
+@sprite .tabStrip .tabStripClosable a.tabStripClose {
+ gwt-image: "tabClose";
+}
+
+@sprite .tabStrip .tabStripClosable a.tabStripClose:hover {
+ gwt-image: "tabClose";
+}
+
+.tabBody {
+ overflow: hidden;
+}
+
+.tabStripActive .tabRight {
+ margin-top: -1px;
+}
+
+.tabStripActive span.tabStripText {
+ font: normal activeHeadingTextWeight activeHeadingTextSize activeHeadingTextFont;
+ color: activeHeadingTextColor;
+}
+
+.tabRight {
+ padding: 0;
+}
+
+.tabStrip .tabStripClose {
+ display: none;
+}
+
+.tabStripClosable .tabStripClose {
+ background-repeat: no-repeat;
+ display: block;
+ width: 11px;
+ height: 11px;
+ position: absolute;
+ top: 3px;
+ right: 3px;
+ cursor: pointer;
+ z-index: 2;
+}
+
+.tabStripClosable .tabStripClose {
+ opacity: 0.6;
+}
+
+.tabStripActive .tabStripClose {
+ opacity: .8;
+}
+
+.tabStripClosable .tabStripClose:hover {
+ opacity: 1;
+}
+
+.tabBody {
+ border: tabBodyBorder;
+ border-bottom: 0 none;
+}
+
+.tabScrollerLeft, .tabScrollerRight {
+ margin-top: 1px;
+}
+
+.tabScrolling .tabStripWrap {
+ margin-left: scrollerWidth;
+ margin-right: scrollerWidth;
+}
+
+.tabScrolling {
+ position: relative;
+}
+
+.tabImage {
+ position: absolute;
+
+ top: tabIconTopOffset;
+ left: tabIconLeftOffset;
+}
+
+.tabStripOver {
+}
+
+
+
+.tabItem {
+ color: headingTextColor;
+}
+
+.tabStripActive.tabItem .tabStripText {
+ font: normal activeHeadingTextWeight activeHeadingTextSize activeHeadingTextFont;
+}
+
+.tabStripActive.tabItem {
+ background: -webkit-linear-gradient(bottom, headerGradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(bottom, headerGradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(bottom, headerGradient); /* IE10+ */
+ background: linear-gradient(to top, headerGradient); /* W3C */
+
+ border-top: 1px solid lastStopColor;
+}
+
+.tabItem {
+ border-bottom-left-radius: cornerRadius;
+ border-bottom-right-radius: cornerRadius;
+ border-bottom: tabItemBorderTop;
+ border-left: tabItemBorderLeft;
+ border-right: tabItemBorderRight;
+
+ padding-left: tabLeftPadding;
+ padding-right: tabRightPadding;
+
+ background: -webkit-linear-gradient(bottom, inactiveHeaderGradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(bottom, inactiveHeaderGradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(bottom, inactiveHeaderGradient); /* IE10+ */
+ background: linear-gradient(to top, inactiveHeaderGradient); /* W3C */
+}
+.tabItem.tabStripClosable {
+ padding-right: tabRightPaddingClosable;
+}
+
+@sprite .tabScrollerLeft {
+ gwt-image: "scrollerLeft";
+ width: scrollerWidth;
+ background: -webkit-linear-gradient(bottom, tabStripGradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(bottom, tabStripGradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(bottom, tabStripGradient); /* IE10+ */
+ background: linear-gradient(to top, tabStripGradient); /* W3C */
+ background-position: center;
+
+ margin-top: 1px;
+ border-right: 1px solid borderColor;
+ border-top: 1px solid borderColor;
+ border-bottom: 1px solid borderColor;
+
+ position: absolute;
+ left: 0;
+ top: 0;
+ z-index: 10;
+ cursor: pointer;
+}
+
+.tabScrollerLeftOver {
+}
+
+
+@sprite .tabScrollerRight {
+ gwt-image: "scrollerRight";
+ width: scrollerWidth;
+ background: -webkit-linear-gradient(bottom, tabStripGradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(bottom, tabStripGradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(bottom, tabStripGradient); /* IE10+ */
+ background: linear-gradient(to top, tabStripGradient); /* W3C */
+ background-position: center;
+
+ margin-top: 1px;
+ border-left: 1px solid borderColor;
+ border-top: 1px solid borderColor;
+ border-bottom: 1px solid borderColor;
+
+ right: 0;
+ top: 0;
+ z-index: 10;
+ cursor: pointer;
+}
+.tabScrollerLeftDisabled, .tabScrollerRightDisabled {
+ cursor: default;
+ opacity: .5;
+}
+.tabScrollerRightOver {
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3TabPanelBottom.html b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3TabPanelBottom.html
new file mode 100644
index 0000000..2a56dec
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3TabPanelBottom.html
@@ -0,0 +1,11 @@
+
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3TabPanelBottomAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3TabPanelBottomAppearance.java
new file mode 100644
index 0000000..69ae7a8
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3TabPanelBottomAppearance.java
@@ -0,0 +1,52 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.tabs;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.core.client.XTemplates;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.widget.core.client.TabPanel.TabPanelBottomAppearance;
+
+public class Css3TabPanelBottomAppearance extends Css3TabPanelAppearance implements TabPanelBottomAppearance {
+
+ public interface Css3TabPanelBottomTemplate extends XTemplates {
+ @XTemplate(source = "Css3TabPanelBottom.html")
+ SafeHtml render(Css3TabPanelBottomStyle style);
+ }
+
+ public interface Css3TabPanelBottomResources extends Css3TabPanelResources {
+ @Source("Css3TabPanelBottom.css")
+ @Override
+ Css3TabPanelBottomStyle style();
+ }
+
+ public interface Css3TabPanelBottomStyle extends Css3TabPanelStyle {
+ }
+
+ private final Css3TabPanelBottomTemplate template = GWT.create(Css3TabPanelBottomTemplate.class);
+
+ public Css3TabPanelBottomAppearance() {
+ this(GWT.create(Css3TabPanelBottomResources.class));
+ }
+
+ public Css3TabPanelBottomAppearance(Css3TabPanelBottomResources resources) {
+ super(resources);
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder builder) {
+ builder.append(template.render((Css3TabPanelBottomStyle) style));
+ }
+
+ @Override
+ public XElement getBar(XElement parent) {
+ return parent.getLastChild().cast();
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3TabPanelTabItem.html b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3TabPanelTabItem.html
new file mode 100644
index 0000000..200d08b
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tabs/Css3TabPanelTabItem.html
@@ -0,0 +1,4 @@
+
+
+ {config.text}
+
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tabs/scrollerLeft.png b/src/com/sencha/gxt/theme/neptune/client/base/tabs/scrollerLeft.png
new file mode 100644
index 0000000..8d00a24
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tabs/scrollerLeft.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tabs/scrollerRight.png b/src/com/sencha/gxt/theme/neptune/client/base/tabs/scrollerRight.png
new file mode 100644
index 0000000..2add25a
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tabs/scrollerRight.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tabs/tabClose.png b/src/com/sencha/gxt/theme/neptune/client/base/tabs/tabClose.png
new file mode 100644
index 0000000..1ca1c86
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tabs/tabClose.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tabs/tabCloseOver.png b/src/com/sencha/gxt/theme/neptune/client/base/tabs/tabCloseOver.png
new file mode 100644
index 0000000..c47ca89
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tabs/tabCloseOver.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tips/Css3Tip.css b/src/com/sencha/gxt/theme/neptune/client/base/tips/Css3Tip.css
new file mode 100644
index 0000000..9a31286
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tips/Css3Tip.css
@@ -0,0 +1,101 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def radius value('theme.tip.borderRadius', 'px');
+@def borderStyle value('theme.tip.border.style');
+@def borderColor value('theme.tip.border.color');
+@def borderWidth value('theme.tip.border.toString');
+
+@def css3Leftover value('theme.tip.radiusMinusBorderWidth.toString');
+
+@def padding value('theme.tip.padding.toString');
+@def margin value('theme.tip.margin.toString');
+
+@def opacity value('theme.tip.opacity');
+@def backgroundColor value('theme.tip.backgroundColor');
+
+
+@def headerColor value('theme.tip.headerText.color');
+@def headerSize value('theme.tip.headerText.size');
+@def headerWeight value('theme.tip.headerText.weight');
+@def headerFamily value('theme.tip.headerText.family');
+@def messageColor value('theme.tip.messageText.color');
+@def messageSize value('theme.tip.messageText.size');
+@def messageWeight value('theme.tip.messageText.weight');
+@def messageFamily value('theme.tip.messageText.family');
+
+@def headerPadding value('theme.tip.headerPadding.toString');
+@def messagePadding value('theme.tip.messagePadding.toString');
+
+
+.tipWrap {
+ border-color: borderColor;
+ border-style: borderStyle;
+ border-width: borderWidth;
+ border-radius: radius;
+
+ background-color: backgroundColor;
+
+ opacity: opacity;
+
+ margin: margin;
+ /* applying the radius as padding here, avoiding us needing to do math when working out the sliced padding,
+ which already has the padding from the images */
+ padding: css3Leftover;
+}
+
+.tip {
+ padding: padding;
+}
+
+.tools {
+ float: right;
+}
+
+.heading {
+ color: headerColor;
+ font-size: headerSize;
+ font-weight: headerWeight;
+ font-family: headerFamily;
+}
+
+.headingWrap {
+ padding: headerPadding;
+}
+
+.text {
+ color: messageColor;
+ font-size: messageSize;
+ font-weight: messageWeight;
+ font-family: messageFamily;
+}
+
+.textWrap {
+ padding: messagePadding;
+}
+
+.anchor {}
+
+@sprite .anchorBottom {
+ gwt-image: "anchorBottom";
+ position: absolute;
+}
+
+@sprite .anchorRight {
+ gwt-image: "anchorRight";
+ position: absolute;
+}
+
+@sprite .anchorLeft {
+ gwt-image: "anchorLeft";
+ position: absolute;
+}
+
+@sprite .anchorTop {
+ gwt-image: "anchorTop";
+ position: absolute;
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tips/Css3TipAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/tips/Css3TipAppearance.java
new file mode 100644
index 0000000..9215023
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tips/Css3TipAppearance.java
@@ -0,0 +1,147 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.tips;
+
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.dom.client.Style.Display;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.core.client.Style.Side;
+import com.sencha.gxt.core.client.XTemplates;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.core.client.util.Util;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.tips.Tip.TipAppearance;
+
+public class Css3TipAppearance implements TipAppearance {
+ public interface Css3TipResources extends ClientBundle {
+ @Source("Css3Tip.css")
+ Css3TipStyle style();
+
+ ImageResource anchorBottom();
+ ImageResource anchorLeft();
+ ImageResource anchorRight();
+ ImageResource anchorTop();
+
+ ThemeDetails theme();
+ }
+ public interface Css3TipStyle extends CssResource {
+ String tip();
+
+ String tipWrap();
+
+ String anchorTop();
+
+ String anchorRight();
+
+ String anchorBottom();
+
+ String anchorLeft();
+
+ String anchor();
+
+ String heading();
+
+ String headingWrap();
+
+ String text();
+
+ String textWrap();
+
+ String tools();
+ }
+
+ public interface Css3TipTemplate extends XTemplates {
+ @XTemplate("" +
+ "
" +
+ "
" +
+ "
" +
+ "
")
+ SafeHtml render(Css3TipStyle style);
+ }
+
+ private final Css3TipStyle style;
+ private final Css3TipTemplate template = GWT.create(Css3TipTemplate.class);
+
+ public Css3TipAppearance() {
+ this(GWT.create(Css3TipResources.class));
+ }
+
+ public Css3TipAppearance(Css3TipResources resources) {
+ style = resources.style();
+ style.ensureInjected();
+ }
+
+ @Override
+ public void applyAnchorDirectionStyle(XElement anchorEl, Side anchor) {
+ anchorEl.setClassName(style.anchorTop(), anchor == Side.TOP);
+ anchorEl.setClassName(style.anchorBottom(), anchor == Side.BOTTOM);
+ anchorEl.setClassName(style.anchorRight(), anchor == Side.RIGHT);
+ anchorEl.setClassName(style.anchorLeft(), anchor == Side.LEFT);
+ }
+
+ @Override
+ public void applyAnchorStyle(XElement anchorEl) {
+ anchorEl.addClassName(style.anchor());
+ }
+
+ public XElement getHeaderElement(XElement parent) {
+ return parent.selectNode("." + style.heading());
+ }
+
+ @Override
+ public XElement getTextElement(XElement parent) {
+ return parent.selectNode("." + style.text());
+ }
+
+ @Override
+ public XElement getToolsElement(XElement parent) {
+ return parent.selectNode("." + style.tools());
+ }
+
+ @Override
+ public void removeAnchorStyle(XElement anchorEl) {
+ anchorEl.removeClassName(style.anchor());
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder sb) {
+ sb.append(template.render(style));
+ }
+
+
+ @Override
+ public int autoWidth(XElement parent, int minWidth, int maxWidth) {
+ int tw = getTextElement(parent).getTextWidth();
+ int hw = getHeaderElement(parent).getTextWidth();
+
+ int w = Math.max(tw, hw);
+ // framing
+ w += 10;
+
+ w += getToolsElement(parent).getOffsetWidth();
+
+ return Util.constrain(w, minWidth, maxWidth);
+ }
+
+ @Override
+ public void updateContent(XElement parent, String heading, String text) {
+ XElement header = getHeaderElement(parent);
+ if (heading != null && !heading.equals("")) {
+ header.setInnerHTML(heading);
+ header.getParentElement().getStyle().clearDisplay();
+ } else {
+ header.getParentElement().getStyle().setDisplay(Display.NONE);
+ }
+
+ getTextElement(parent).setInnerHTML(text);
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tips/anchorBottom.png b/src/com/sencha/gxt/theme/neptune/client/base/tips/anchorBottom.png
new file mode 100644
index 0000000..9b8420a
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tips/anchorBottom.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tips/anchorLeft.png b/src/com/sencha/gxt/theme/neptune/client/base/tips/anchorLeft.png
new file mode 100644
index 0000000..ae70bbf
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tips/anchorLeft.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tips/anchorRight.png b/src/com/sencha/gxt/theme/neptune/client/base/tips/anchorRight.png
new file mode 100644
index 0000000..c7a69f9
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tips/anchorRight.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tips/anchorTop.png b/src/com/sencha/gxt/theme/neptune/client/base/tips/anchorTop.png
new file mode 100644
index 0000000..9c4e59b
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tips/anchorTop.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/toolbar/Css3LabelToolItem.css b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/Css3LabelToolItem.css
new file mode 100644
index 0000000..0d05e5a
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/Css3LabelToolItem.css
@@ -0,0 +1,27 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def textFamily value('theme.toolbar.labelItem.text.family');
+@def textSize value('theme.toolbar.labelItem.text.size');
+@def textWeight value('theme.toolbar.labelItem.text.weight');
+@def textColor value('theme.toolbar.labelItem.text.color');
+
+@def lineHeight value('theme.toolbar.labelItem.lineHeight');
+
+@def padding value('theme.toolbar.labelItem.padding');
+
+.item {
+ display: block;
+ line-height: lineHeight;
+ padding: padding;
+ white-space: nowrap;
+
+ font-family: textFamily;
+ font-size: textSize;
+ font-weight: textWeight;
+ color: textColor;
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/toolbar/Css3LabelToolItemAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/Css3LabelToolItemAppearance.java
new file mode 100644
index 0000000..852d12d
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/Css3LabelToolItemAppearance.java
@@ -0,0 +1,28 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.toolbar;
+
+import com.google.gwt.core.shared.GWT;
+import com.sencha.gxt.theme.base.client.toolbar.LabelToolItemDefaultAppearance;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+
+public class Css3LabelToolItemAppearance extends LabelToolItemDefaultAppearance {
+ public interface Css3LabelToolItemResources extends LabelToolItemResources {
+ @Override
+ @Source("Css3LabelToolItem.css")
+ Css3LabelToolItemStyle css();
+
+ ThemeDetails theme();
+ }
+ public interface Css3LabelToolItemStyle extends LabelToolItemStyle {
+
+ }
+ public Css3LabelToolItemAppearance() {
+ super(GWT.create(Css3LabelToolItemResources.class));
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/toolbar/Css3PagingToolBarAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/Css3PagingToolBarAppearance.java
new file mode 100644
index 0000000..37e587d
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/Css3PagingToolBarAppearance.java
@@ -0,0 +1,74 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.toolbar;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.ImageResource;
+import com.sencha.gxt.widget.core.client.toolbar.PagingToolBar.PagingToolBarAppearance;
+
+/**
+ *
+ */
+public class Css3PagingToolBarAppearance implements PagingToolBarAppearance {
+
+
+ public interface Css3PagingToolBarResources extends PagingToolBarAppearance, ClientBundle {
+ ImageResource first();
+
+ ImageResource prev();
+
+ ImageResource next();
+
+ ImageResource last();
+
+ ImageResource refresh();
+
+ ImageResource loading();
+ }
+
+ private final Css3PagingToolBarResources resources;
+
+ public Css3PagingToolBarAppearance() {
+ this(GWT.create(Css3PagingToolBarResources.class));
+ }
+
+ public Css3PagingToolBarAppearance(Css3PagingToolBarResources resources) {
+ this.resources = resources;
+ }
+
+ @Override
+ public ImageResource first() {
+ return resources.first();
+ }
+
+ @Override
+ public ImageResource last() {
+ return resources.last();
+ }
+
+ @Override
+ public ImageResource next() {
+ return resources.next();
+ }
+
+ @Override
+ public ImageResource prev() {
+ return resources.prev();
+ }
+
+ @Override
+ public ImageResource refresh() {
+ return resources.refresh();
+ }
+
+ @Override
+ public ImageResource loading() {
+ return resources.loading();
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/toolbar/Css3SeparatorToolItem.css b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/Css3SeparatorToolItem.css
new file mode 100644
index 0000000..a9b1238
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/Css3SeparatorToolItem.css
@@ -0,0 +1,28 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def gradient value('theme.toolbar.gradient');
+
+.separator {
+ border: 0 none;
+ cursor: default;
+ display: inline-block;
+ height: 16px;
+ width: 2px;
+
+ overflow: hidden;
+}
+
+
+@if gxt.css3.enabled true {
+ .separator {
+ background: -webkit-linear-gradient(left, gradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(left, gradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(left, gradient); /* IE10+ */
+ background: linear-gradient(to right, gradient); /* W3C */
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/toolbar/Css3SeparatorToolItemAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/Css3SeparatorToolItemAppearance.java
new file mode 100644
index 0000000..503c2b7
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/Css3SeparatorToolItemAppearance.java
@@ -0,0 +1,64 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.toolbar;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.core.client.XTemplates;
+import com.sencha.gxt.core.client.resources.StyleInjectorHelper;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.toolbar.SeparatorToolItem.SeparatorToolItemAppearance;
+
+/**
+ *
+ */
+public class Css3SeparatorToolItemAppearance implements SeparatorToolItemAppearance {
+
+ public interface Css3SeparatorToolItemResources extends ClientBundle {
+ @Source("Css3SeparatorToolItem.css")
+ Css3SeparatorToolItemStyle style();
+
+ ThemeDetails theme();
+ }
+
+ public interface Css3SeparatorToolItemStyle extends CssResource {
+ String separator();
+ }
+
+ public interface Css3SeparatorToolItemTemplate extends XTemplates {
+ @XTemplate("")
+ SafeHtml render(Css3SeparatorToolItemStyle style);
+ }
+
+
+ private final Css3SeparatorToolItemStyle style;
+ private final Css3SeparatorToolItemTemplate template;
+
+ public Css3SeparatorToolItemAppearance() {
+ this(GWT.create(Css3SeparatorToolItemResources.class));
+ }
+
+ public Css3SeparatorToolItemAppearance(Css3SeparatorToolItemResources resources) {
+ this(resources, GWT.create(Css3SeparatorToolItemTemplate.class));
+ }
+
+ public Css3SeparatorToolItemAppearance(Css3SeparatorToolItemResources resources, Css3SeparatorToolItemTemplate template) {
+ this.style = resources.style();
+ this.template = template;
+
+ StyleInjectorHelper.ensureInjected(style, true);
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder sb) {
+ sb.append(template.render(style));
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/toolbar/Css3ToolBar.css b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/Css3ToolBar.css
new file mode 100644
index 0000000..9d8a160
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/Css3ToolBar.css
@@ -0,0 +1,31 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def gradient value('theme.toolbar.gradient');
+@def borderColor value('theme.toolbar.border.color');
+@def borderWidth value('theme.toolbar.border.toString');
+@def borderStyle value('theme.toolbar.border.style');
+
+@def padding value('theme.toolbar.padding.toString');
+
+.toolBar {
+ padding: padding;
+ border-style: borderStyle;
+ border-color: borderColor;
+ border-width: borderWidth;
+ display: block;
+ position: relative;
+ left: 0;
+ top: 0;
+ zoom: 1;
+ overflow: hidden;
+
+ background: -webkit-linear-gradient(top, gradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, gradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, gradient); /* IE10+ */
+ background: linear-gradient(to bottom, gradient); /* W3C */
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/toolbar/Css3ToolBarAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/Css3ToolBarAppearance.java
new file mode 100644
index 0000000..1dede40
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/Css3ToolBarAppearance.java
@@ -0,0 +1,51 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.toolbar;
+
+import com.google.gwt.core.client.GWT;
+import com.sencha.gxt.core.client.resources.StyleInjectorHelper;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.theme.neptune.client.base.container.Css3HBoxLayoutContainerAppearance;
+import com.sencha.gxt.widget.core.client.toolbar.ToolBar.ToolBarAppearance;
+
+/**
+ *
+ */
+public class Css3ToolBarAppearance extends Css3HBoxLayoutContainerAppearance implements ToolBarAppearance {
+
+ public interface Css3ToolBarResources extends Css3HBoxLayoutContainerResources {
+ @Source({"com/sencha/gxt/theme/base/client/container/BoxLayout.css", "com/sencha/gxt/theme/neptune/client/base/container/Css3HBoxLayoutContainer.css", "Css3ToolBar.css"})
+ Css3ToolBarStyle style();
+
+ ThemeDetails theme();
+ }
+
+ public interface Css3ToolBarStyle extends Css3HBoxLayoutContainerStyle {
+ String toolBar();
+ }
+
+ @Override
+ public String toolBarClassName() {
+ return style.toolBar();
+ }
+
+
+ private final Css3ToolBarResources resources;
+ private final Css3ToolBarStyle style;
+
+ public Css3ToolBarAppearance() {
+ this(GWT.create(Css3ToolBarResources.class));
+ }
+
+ public Css3ToolBarAppearance(Css3ToolBarResources resources) {
+ this.resources = resources;
+ this.style = this.resources.style();
+
+ StyleInjectorHelper.ensureInjected(this.style, true);
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/toolbar/first.png b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/first.png
new file mode 100644
index 0000000..846a226
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/first.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/toolbar/last.png b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/last.png
new file mode 100644
index 0000000..c579a19
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/last.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/toolbar/loading.gif b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/loading.gif
new file mode 100644
index 0000000..471c1a4
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/loading.gif differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/toolbar/next.png b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/next.png
new file mode 100644
index 0000000..8462072
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/next.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/toolbar/prev.png b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/prev.png
new file mode 100644
index 0000000..c0d88f8
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/prev.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/toolbar/refresh.png b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/refresh.png
new file mode 100644
index 0000000..3922c8f
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/toolbar/refresh.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/Css3Tools.java b/src/com/sencha/gxt/theme/neptune/client/base/tools/Css3Tools.java
new file mode 100644
index 0000000..7d1d2e1
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tools/Css3Tools.java
@@ -0,0 +1,172 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.tools;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.ImageResource;
+import com.sencha.gxt.widget.core.client.button.Tools;
+
+/**
+ */
+public class Css3Tools extends Tools {
+
+ public interface Css3ToolResources extends ToolResources, ClientBundle {
+
+ @Source("com/sencha/gxt/theme/base/client/tool/BaseTools.css")
+ ToolStyle style();
+
+ @Override
+ ImageResource closeIcon();
+
+ @Override
+ ImageResource closeOverIcon();
+
+ @Override
+ ImageResource collapseIcon();
+
+ @Override
+ ImageResource collapseOverIcon();
+
+ @Override
+ ImageResource doubleDownIcon();
+
+ @Override
+ ImageResource doubleDownOverIcon();
+
+ @Override
+ ImageResource doubleLeftIcon();
+
+ @Override
+ ImageResource doubleLeftOverIcon();
+
+ @Override
+ ImageResource doubleRightIcon();
+
+ @Override
+ ImageResource doubleRightOverIcon();
+
+ @Override
+ ImageResource doubleUpIcon();
+
+ @Override
+ ImageResource doubleUpOverIcon();
+
+ @Override
+ ImageResource downIcon();
+
+ @Override
+ ImageResource downOverIcon();
+
+ @Override
+ ImageResource expandIcon();
+
+ @Override
+ ImageResource expandOverIcon();
+
+ @Override
+ ImageResource gearIcon();
+
+ @Override
+ ImageResource gearOverIcon();
+
+ @Override
+ ImageResource leftIcon();
+
+ @Override
+ ImageResource leftOverIcon();
+
+ @Override
+ ImageResource maximizeIcon();
+
+ @Override
+ ImageResource maximizeOverIcon();
+
+ @Override
+ ImageResource minimizeIcon();
+
+ @Override
+ ImageResource minimizeOverIcon();
+
+ @Override
+ ImageResource minusIcon();
+
+ @Override
+ ImageResource minusOverIcon();
+
+ @Override
+ ImageResource pinIcon();
+
+ @Override
+ ImageResource pinOverIcon();
+
+ @Override
+ ImageResource unpinIcon();
+
+ @Override
+ ImageResource unpinOverIcon();
+
+ @Override
+ ImageResource plusIcon();
+
+ @Override
+ ImageResource plusOverIcon();
+
+ @Override
+ ImageResource printIcon();
+
+ @Override
+ ImageResource printOverIcon();
+
+ @Override
+ ImageResource questionIcon();
+
+ @Override
+ ImageResource questionOverIcon();
+
+ @Override
+ ImageResource refreshIcon();
+
+ @Override
+ ImageResource refreshOverIcon();
+
+ @Override
+ ImageResource restoreIcon();
+
+ @Override
+ ImageResource restoreOverIcon();
+
+ @Override
+ ImageResource rightIcon();
+
+ @Override
+ ImageResource rightOverIcon();
+
+ @Override
+ ImageResource saveIcon();
+
+ @Override
+ ImageResource saveOverIcon();
+
+ @Override
+ ImageResource searchIcon();
+
+ @Override
+ ImageResource searchOverIcon();
+
+ @Override
+ ImageResource upIcon();
+
+ @Override
+ ImageResource upOverIcon();
+ }
+
+ public Css3Tools() {
+ super(GWT.create(Css3ToolResources.class));
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/closeIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/closeIcon.png
new file mode 100644
index 0000000..93fa05b
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/closeIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/closeOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/closeOverIcon.png
new file mode 100644
index 0000000..e83af3d
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/closeOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/collapseIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/collapseIcon.png
new file mode 100644
index 0000000..cee0bc0
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/collapseIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/collapseOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/collapseOverIcon.png
new file mode 100644
index 0000000..9a813c8
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/collapseOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleDownIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleDownIcon.png
new file mode 100644
index 0000000..97a4e07
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleDownIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleDownOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleDownOverIcon.png
new file mode 100644
index 0000000..a45938d
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleDownOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleLeftIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleLeftIcon.png
new file mode 100644
index 0000000..846a226
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleLeftIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleLeftOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleLeftOverIcon.png
new file mode 100644
index 0000000..f810172
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleLeftOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleRightIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleRightIcon.png
new file mode 100644
index 0000000..c579a19
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleRightIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleRightOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleRightOverIcon.png
new file mode 100644
index 0000000..b7a845e
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleRightOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleUpIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleUpIcon.png
new file mode 100644
index 0000000..d8afebd
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleUpIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleUpOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleUpOverIcon.png
new file mode 100644
index 0000000..7dbb692
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/doubleUpOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/downIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/downIcon.png
new file mode 100644
index 0000000..ac63c43
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/downIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/downOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/downOverIcon.png
new file mode 100644
index 0000000..e0e5d45
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/downOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/expandIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/expandIcon.png
new file mode 100644
index 0000000..f8299fe
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/expandIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/expandOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/expandOverIcon.png
new file mode 100644
index 0000000..fe5dd61
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/expandOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/gearIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/gearIcon.png
new file mode 100644
index 0000000..091f5ab
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/gearIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/gearOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/gearOverIcon.png
new file mode 100644
index 0000000..1fc5314
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/gearOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/leftIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/leftIcon.png
new file mode 100644
index 0000000..f3012f6
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/leftIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/leftOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/leftOverIcon.png
new file mode 100644
index 0000000..62ef16d
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/leftOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/maximizeIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/maximizeIcon.png
new file mode 100644
index 0000000..e67e237
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/maximizeIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/maximizeOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/maximizeOverIcon.png
new file mode 100644
index 0000000..e778954
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/maximizeOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/minimizeIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/minimizeIcon.png
new file mode 100644
index 0000000..175cb43
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/minimizeIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/minimizeOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/minimizeOverIcon.png
new file mode 100644
index 0000000..11a4f33
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/minimizeOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/minusIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/minusIcon.png
new file mode 100644
index 0000000..8314bb3
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/minusIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/minusOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/minusOverIcon.png
new file mode 100644
index 0000000..f837ace
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/minusOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/pinIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/pinIcon.png
new file mode 100644
index 0000000..78bc49e
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/pinIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/pinOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/pinOverIcon.png
new file mode 100644
index 0000000..d5e8a2d
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/pinOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/plusIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/plusIcon.png
new file mode 100644
index 0000000..be6b670
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/plusIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/plusOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/plusOverIcon.png
new file mode 100644
index 0000000..0bc3194
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/plusOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/printIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/printIcon.png
new file mode 100644
index 0000000..f19a8af
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/printIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/printOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/printOverIcon.png
new file mode 100644
index 0000000..b0b7854
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/printOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/questionIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/questionIcon.png
new file mode 100644
index 0000000..105150a
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/questionIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/questionOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/questionOverIcon.png
new file mode 100644
index 0000000..b241836
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/questionOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/refreshIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/refreshIcon.png
new file mode 100644
index 0000000..3922c8f
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/refreshIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/refreshOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/refreshOverIcon.png
new file mode 100644
index 0000000..ffaf9c0
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/refreshOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/restoreIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/restoreIcon.png
new file mode 100644
index 0000000..175cb43
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/restoreIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/restoreOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/restoreOverIcon.png
new file mode 100644
index 0000000..11a4f33
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/restoreOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/rightIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/rightIcon.png
new file mode 100644
index 0000000..b7dc14d
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/rightIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/rightOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/rightOverIcon.png
new file mode 100644
index 0000000..3bb6fa2
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/rightOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/saveIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/saveIcon.png
new file mode 100644
index 0000000..a7cec1a
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/saveIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/saveOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/saveOverIcon.png
new file mode 100644
index 0000000..2bf5152
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/saveOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/searchIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/searchIcon.png
new file mode 100644
index 0000000..6c38434
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/searchIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/searchOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/searchOverIcon.png
new file mode 100644
index 0000000..da5374f
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/searchOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/unpinIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/unpinIcon.png
new file mode 100644
index 0000000..b78325f
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/unpinIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/unpinOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/unpinOverIcon.png
new file mode 100644
index 0000000..a3054fe
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/unpinOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/upIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/upIcon.png
new file mode 100644
index 0000000..8b84622
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/upIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tools/upOverIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/tools/upOverIcon.png
new file mode 100644
index 0000000..5884d4d
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tools/upOverIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tree/Css3Tree.css b/src/com/sencha/gxt/theme/neptune/client/base/tree/Css3Tree.css
new file mode 100644
index 0000000..bffe543
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tree/Css3Tree.css
@@ -0,0 +1,98 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def fontFamily value('theme.tree.text.family');
+@def fontSize value('theme.tree.text.size');
+@def fontWeight value('theme.tree.text.weight');
+@def fontColor value('theme.tree.text.color');
+@def lineHeight value('theme.tree.lineHeight');
+
+@def iconMargin value('theme.tree.iconMargin.toString');
+@def itemHeight value('theme.tree.itemHeight');
+
+@def nodePadding value('theme.tree.nodePadding.toString');
+
+@def dragOverBackgroundColor value('theme.tree.dragOverBackgroundColor');
+@def dropBackgroundColor value('theme.tree.dropBackgroundColor');
+@def overBackgroundColor value('theme.tree.overBackgroundColor');
+@def selectedBackgroundColor value('theme.tree.selectedBackgroundColor');
+
+.tree {
+ cursor: default;
+ -moz-outline: none;
+ -moz-user-focus: none;
+ outline: 0 none;
+ position: relative;
+}
+
+.tree {
+ padding-bottom: 1px;
+}
+
+@if gxt.user.agent ie9 {
+ .tree {
+ min-height: 1%; /* EXTGWT-2764 */
+ }
+}
+
+.node {
+ cursor: default;
+}
+
+.element {
+ white-space: nowrap;
+ height: itemHeight;
+}
+
+.joint {
+ vertical-align: top;
+ margin: iconMargin;
+}
+
+.check {}
+
+.icon {
+ vertical-align: top;
+ margin: iconMargin;
+}
+
+.container {
+ display: none;
+}
+
+.text {
+ white-space: nowrap;
+ text-decoration: none;
+ padding: nodePadding;
+ display: inline-block;
+ vertical-align: middle;
+ margin-top: 0px;
+ font-style: normal;
+ font-size: fontSize;
+ font-weight: fontWeight;
+ font-family: fontFamily;
+ color: fontColor;
+}
+
+.dragOver {
+ background-image: none !important;
+ background-color: dragOverBackgroundColor !important;
+}
+
+
+.over {
+ background-color: overBackgroundColor;
+}
+
+.drop {
+ background-color: dropBackgroundColor;
+}
+
+.selected {
+ background-color: selectedBackgroundColor !important;
+}
+
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tree/Css3TreeAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/tree/Css3TreeAppearance.java
new file mode 100644
index 0000000..2787a16
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/tree/Css3TreeAppearance.java
@@ -0,0 +1,350 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.tree;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.google.gwt.safehtml.shared.SafeHtmlUtils;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.ui.AbstractImagePrototype;
+import com.sencha.gxt.core.client.GXT;
+import com.sencha.gxt.core.client.dom.XDOM;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.core.client.resources.StyleInjectorHelper;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.tree.Tree.CheckState;
+import com.sencha.gxt.widget.core.client.tree.Tree.Joint;
+import com.sencha.gxt.widget.core.client.tree.Tree.TreeAppearance;
+import com.sencha.gxt.widget.core.client.tree.TreeStyle;
+import com.sencha.gxt.widget.core.client.tree.TreeView.TreeViewRenderMode;
+
+/**
+ *
+ */
+public class Css3TreeAppearance implements TreeAppearance {
+
+ public interface Css3TreeResources extends ClientBundle {
+
+ @Source({"com/sencha/gxt/theme/base/client/tree/Tree.css", "Css3Tree.css"})
+ Css3TreeStyle style();
+
+ ThemeDetails theme();
+
+ ImageResource checked();
+
+ @Source("folderOpen.png")
+ ImageResource folderOpened();
+
+ @Source("folder.png")
+ ImageResource folderClosed();
+
+ @Source("arrowRight.png")
+ ImageResource jointCollapsedIcon();
+
+ @Source("arrowDown.png")
+ ImageResource jointExpandedIcon();
+
+ @Source("loading.gif")
+ ImageResource loadingIcon();
+
+ @Source("partial.png")
+ ImageResource partialChecked();
+
+ ImageResource unchecked();
+ }
+
+ public interface Css3TreeStyle extends CssResource {
+ String check();
+
+ String container();
+
+ String dragOver();
+
+ String drop();
+
+ String element();
+
+ String icon();
+
+ String joint();
+
+ String node();
+
+ String over();
+
+ String selected();
+
+ String text();
+
+ String tree();
+ }
+
+ private final Css3TreeResources resources;
+ private final Css3TreeStyle style;
+
+
+ protected String indentMarkupStart = "";
+
+ protected int indentWidth = 17;
+
+
+ public Css3TreeAppearance() {
+ this(GWT.create(Css3TreeResources.class));
+ }
+
+ public Css3TreeAppearance(Css3TreeResources resources) {
+ this.resources = resources;
+ this.style = resources.style();
+
+ StyleInjectorHelper.ensureInjected(style, true);
+ }
+
+
+ @Override
+ public ImageResource closeNodeIcon() {
+ return resources.folderClosed();
+ }
+
+ @Override
+ public String elementSelector() {
+ return "." + style.element();
+ }
+
+ public XElement findIconElement(XElement target) {
+ return target.selectNode("." + style.icon());
+ }
+
+ @Override
+ public XElement findJointElement(XElement target) {
+ return target.selectNode("." + style.joint());
+ }
+
+ @Override
+ public XElement getCheckElement(XElement container) {
+ return container.getChildNodes().getItem(2).cast();
+ }
+
+ @Override
+ public XElement getContainerElement(XElement node) {
+ return node.getFirstChildElement().cast();
+ }
+
+ @Override
+ public XElement getIconElement(XElement container) {
+ return container.getChildNodes().getItem(3).cast();
+ }
+
+ @Override
+ public XElement getJointElement(XElement container) {
+ return container.getChildNodes().getItem(1).cast();
+ }
+
+ @Override
+ public XElement getTextElement(XElement container) {
+ return container.getChildNodes().getItem(4).cast();
+ }
+
+ @Override
+ public boolean isCheckElement(XElement target) {
+ return target.hasClassName(style.check());
+ }
+
+ @Override
+ public boolean isJointElement(XElement target) {
+ if (GXT.isIE6()) {
+ target = target.getParentElement().cast();
+ return target.hasClassName(style.joint());
+ } else {
+ return target.hasClassName(style.joint());
+ }
+ }
+
+ @Override
+ public String itemSelector() {
+ return "." + style.node();
+ }
+
+ @Override
+ public ImageResource loadingIcon() {
+ return resources.loadingIcon();
+ }
+
+ @Override
+ public XElement onCheckChange(XElement node, XElement checkElement, boolean checkable, CheckState state) {
+ Element e = null;
+ if (checkable) {
+ switch (state) {
+ case CHECKED:
+ e = getImage(resources.checked());
+ break;
+ case UNCHECKED:
+ e = getImage(resources.unchecked());
+ break;
+ case PARTIAL:
+ e = getImage(resources.partialChecked());
+ break;
+ }
+ } else {
+ e = DOM.createSpan();
+ }
+ e.addClassName(style.check());
+ e = (Element) node.getFirstChild().insertBefore(e, checkElement);
+ checkElement.removeFromParent();
+ return e.cast();
+ }
+
+ @Override
+ public void onDropOver(XElement node, boolean over) {
+ node.setClassName(style.dragOver(), over);
+ }
+
+ @Override
+ public void onHover(XElement node, boolean over) {
+ node.setClassName(style.over(), over);
+ }
+
+ @Override
+ public XElement onJointChange(XElement node, XElement jointElement, Joint joint, TreeStyle ts) {
+ Element e;
+ switch (joint) {
+ case COLLAPSED:
+ e = getImage(ts.getJointCloseIcon() == null ? resources.jointCollapsedIcon() : ts.getJointCloseIcon());
+ break;
+ case EXPANDED:
+ e = getImage(ts.getJointOpenIcon() == null ? resources.jointExpandedIcon() : ts.getJointOpenIcon());
+ break;
+ default:
+ e = XDOM.create("");
+ }
+
+ e.addClassName(style.joint());
+ e = (Element) node.getFirstChild().insertBefore(e, jointElement);
+ jointElement.removeFromParent();
+ return e.cast();
+ }
+
+ @Override
+ public void onSelect(XElement node, boolean select) {
+ node.setClassName(style.selected(), select);
+ }
+
+ @Override
+ public ImageResource openNodeIcon() {
+ return resources.folderOpened();
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder sb) {
+ // EXTGWT-3113 the inner table is needed so that the tree nodes are as wide as needed with horizontal scrolling
+ if (GXT.isIE6() || GXT.isIE7()) {
+ sb.appendHtmlConstant("");
+ } else {
+ sb.appendHtmlConstant("");
+ }
+ }
+
+ @Override
+ public void renderContainer(SafeHtmlBuilder sb) {
+ sb.appendHtmlConstant("");
+ }
+
+ @Override
+ public void renderNode(SafeHtmlBuilder sb, String id, SafeHtml text, TreeStyle ts, ImageResource icon,
+ boolean checkable, CheckState checked, Joint joint, int level, TreeViewRenderMode renderMode) {
+
+ if (renderMode == TreeViewRenderMode.ALL || renderMode == TreeViewRenderMode.BUFFER_WRAP) {
+ sb.appendHtmlConstant("");
+
+ sb.appendHtmlConstant("
");
+ }
+
+ if (renderMode == TreeViewRenderMode.ALL || renderMode == TreeViewRenderMode.BUFFER_BODY) {
+
+ sb.appendHtmlConstant(getIndentMarkup(level));
+
+ Element jointElement = null;
+ switch (joint) {
+ case COLLAPSED:
+ jointElement = getImage(ts.getJointCloseIcon() == null ? resources.jointCollapsedIcon()
+ : ts.getJointCloseIcon());
+ break;
+ case EXPANDED:
+ jointElement = getImage(ts.getJointOpenIcon() == null ? resources.jointExpandedIcon() : ts.getJointOpenIcon());
+ break;
+ default:
+ // empty
+ }
+
+ if (jointElement != null) {
+ jointElement.addClassName(style.joint());
+ }
+
+ sb.appendHtmlConstant(jointElement == null ? "
" : jointElement.getString());
+
+ // checkable
+ if (checkable) {
+ Element e = null;
+ switch (checked) {
+ case CHECKED:
+ e = getImage(resources.checked());
+ break;
+ case UNCHECKED:
+ e = getImage(resources.unchecked());
+ break;
+ case PARTIAL:
+ e = getImage(resources.partialChecked());
+ break;
+ }
+
+ e.addClassName(style.check());
+ sb.appendHtmlConstant(e.getString());
+ } else {
+ sb.appendHtmlConstant("
");
+ }
+
+ if (icon != null) {
+ Element e = getImage(icon);
+ e.addClassName(style.icon());
+ sb.appendHtmlConstant(e.getString());
+ } else {
+ sb.appendHtmlConstant("
");
+ }
+
+ sb.appendHtmlConstant("
" + text.asString() + "");
+ }
+
+ if (renderMode == TreeViewRenderMode.ALL || renderMode == TreeViewRenderMode.BUFFER_WRAP) {
+ sb.appendHtmlConstant("
");
+ sb.appendHtmlConstant("
");
+ }
+
+ }
+
+ @Override
+ public String textSelector() {
+ return "." + style.text();
+ }
+
+ protected String getIndentMarkup(int level) {
+ return indentMarkupStart + (indentWidth * level) + indentMarkupEnd;
+ }
+
+ private Element getImage(ImageResource ir) {
+ return AbstractImagePrototype.create(ir).createElement();
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tree/arrowDown.png b/src/com/sencha/gxt/theme/neptune/client/base/tree/arrowDown.png
new file mode 100644
index 0000000..4c52756
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tree/arrowDown.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tree/arrowRight.png b/src/com/sencha/gxt/theme/neptune/client/base/tree/arrowRight.png
new file mode 100644
index 0000000..bce7b3c
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tree/arrowRight.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tree/checked.png b/src/com/sencha/gxt/theme/neptune/client/base/tree/checked.png
new file mode 100644
index 0000000..0c6e9e0
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tree/checked.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tree/folder.png b/src/com/sencha/gxt/theme/neptune/client/base/tree/folder.png
new file mode 100644
index 0000000..5371c9f
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tree/folder.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tree/folderOpen.png b/src/com/sencha/gxt/theme/neptune/client/base/tree/folderOpen.png
new file mode 100644
index 0000000..12e7bac
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tree/folderOpen.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tree/loading.gif b/src/com/sencha/gxt/theme/neptune/client/base/tree/loading.gif
new file mode 100644
index 0000000..e846e1d
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tree/loading.gif differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tree/partial.png b/src/com/sencha/gxt/theme/neptune/client/base/tree/partial.png
new file mode 100644
index 0000000..3a9d516
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tree/partial.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/tree/unchecked.png b/src/com/sencha/gxt/theme/neptune/client/base/tree/unchecked.png
new file mode 100644
index 0000000..90edd84
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/tree/unchecked.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/widget/Css3CollapsePanel.css b/src/com/sencha/gxt/theme/neptune/client/base/widget/Css3CollapsePanel.css
new file mode 100644
index 0000000..d033fc1
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/widget/Css3CollapsePanel.css
@@ -0,0 +1,29 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def borderColor value("theme.borderLayout.collapsePanelBorder.color");
+@def borderStyle value("theme.borderLayout.collapsePanelBorder.style");
+@def borderWidth value("theme.borderLayout.collapsePanelBorder.toString");
+
+.panel {
+ border-color: borderColor;
+ border-style: borderStyle;
+ border-width: borderWidth;
+ padding: 2px;
+}
+
+.north,.south {
+ padding-top: 3px;
+}
+
+.west,.east {
+ padding-top: 4px;
+}
+
+.north .iconWrap, .south .iconWrap {
+ float: right;
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/widget/Css3CollapsePanelAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/widget/Css3CollapsePanelAppearance.java
new file mode 100644
index 0000000..aa5b987
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/widget/Css3CollapsePanelAppearance.java
@@ -0,0 +1,95 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.widget;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.core.client.Style.LayoutRegion;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.core.client.resources.StyleInjectorHelper;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.CollapsePanel.CollapsePanelAppearance;
+
+/**
+ *
+ */
+public class Css3CollapsePanelAppearance implements CollapsePanelAppearance {
+
+ public interface Css3CollapsePanelResources extends ClientBundle {
+
+ @Source("Css3CollapsePanel.css")
+ Css3CollapsePanelStyle style();
+
+ ThemeDetails theme();
+ }
+
+ public interface Css3CollapsePanelStyle extends CssResource {
+ String panel();
+
+ String iconWrap();
+
+ String west();
+
+ String east();
+
+ String north();
+
+ String south();
+ }
+
+ private final Css3CollapsePanelResources resources;
+ private final Css3CollapsePanelStyle style;
+
+ public Css3CollapsePanelAppearance() {
+ this(
+ GWT. create(Css3CollapsePanelResources.class));
+ }
+
+ public Css3CollapsePanelAppearance(Css3CollapsePanelResources resources) {
+ this.resources = resources;
+ this.style = this.resources.style();
+
+ StyleInjectorHelper.ensureInjected(style, true);
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder sb, LayoutRegion region) {
+ String cls = style.panel();
+
+ switch (region) {
+ case WEST:
+ cls += " " + style.west();
+ break;
+ case EAST:
+ cls += " " + style.east();
+ break;
+ case NORTH:
+ cls += " " + style.north();
+ break;
+ case SOUTH:
+ cls += " " + style.south();
+ break;
+ case CENTER:
+ break;
+ default:
+ break;
+ }
+
+ sb.appendHtmlConstant("");
+ sb.appendHtmlConstant("
");
+ sb.appendHtmlConstant("
");
+ }
+
+ @Override
+ public XElement iconWrap(XElement parent) {
+ return parent.getFirstChildElement().cast();
+ }
+
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/widget/Css3DatePicker.css b/src/com/sencha/gxt/theme/neptune/client/base/widget/Css3DatePicker.css
new file mode 100644
index 0000000..c03b95c
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/widget/Css3DatePicker.css
@@ -0,0 +1,340 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def borderWidth value('theme.datePicker.border.toString');
+@def borderStyle value('theme.datePicker.border.style');
+@def borderColor value('theme.datePicker.border.color');
+@def backgroundColor value('theme.datePicker.backgroundColor');
+
+@def datePickerWidth value('theme.datePicker.width');
+
+@def headerPadding value('theme.datePicker.headerPadding.toString');
+@def headerBackgroundColor value('theme.datePicker.headerBackgroundColor');
+
+@def headerFontColor value('theme.datePicker.headerText.color');
+@def headerFontFamily value('theme.datePicker.headerText.family');
+@def headerFontSize value('theme.datePicker.headerText.size');
+@def headerFontWeight value('theme.datePicker.headerText.weight');
+@def headerTextPadding value('theme.datePicker.headerTextPadding.toString');
+
+@def columnHeaderColor value('theme.datePicker.dayOfWeekText.color');
+@def columnHeaderFontFamily value('theme.datePicker.dayOfWeekText.family');
+@def columnHeaderFontSize value('theme.datePicker.dayOfWeekText.size');
+@def columnHeaderFontWeight value('theme.datePicker.dayOfWeekText.weight');
+@def columnHeaderBackgroundColor value('theme.datePicker.dayOfWeekBackgroundColor');
+@def columnHeaderLineHeight value('theme.datePicker.dayOfWeekLineHeight');
+@def columnHeaderPadding value('theme.datePicker.dayOfWeekPadding.toString');
+
+@def dayBorderWidth value('theme.datePicker.dayBorder.toString');
+@def dayBorderStyle value('theme.datePicker.dayBorder.style');
+@def dayBorderColor value('theme.datePicker.dayBorder.color');
+@def dayColor value('theme.datePicker.dayText.color');
+@def dayFontFamily value('theme.datePicker.dayText.family');
+@def dayFontSize value('theme.datePicker.dayText.size');
+@def dayFontWeight value('theme.datePicker.dayText.weight');
+@def dayLineHeight value('theme.datePicker.dayLineHeight');
+@def dayPadding value('theme.datePicker.dayPadding.toString');
+
+@def dayDisabledBackgroundColor value('theme.datePicker.dayDisabledBackgroundColor');
+@def dayDisabledColor value('theme.datePicker.dayDisabledText.color');
+@def dayDisabledFontFamily value('theme.datePicker.dayDisabledText.family');
+@def dayDisabledFontSize value('theme.datePicker.dayDisabledText.size');
+@def dayDisabledFontWeight value('theme.datePicker.dayDisabledText.weight');
+
+@def dayNextBackgroundColor value('theme.datePicker.dayNextBackgroundColor');
+@def dayNextColor value('theme.datePicker.dayNextText.color');
+@def dayNextFontFamily value('theme.datePicker.dayNextText.family');
+@def dayNextFontSize value('theme.datePicker.dayNextText.size');
+@def dayNextFontWeight value('theme.datePicker.dayNextText.weight');
+
+@def dayPreviousBackgroundColor value('theme.datePicker.dayPreviousBackgroundColor');
+@def dayPreviousColor value('theme.datePicker.dayPreviousText.color');
+@def dayPreviousFontFamily value('theme.datePicker.dayPreviousText.family');
+@def dayPreviousFontSize value('theme.datePicker.dayPreviousText.size');
+@def dayPreviousFontWeight value('theme.datePicker.dayPreviousText.weight');
+
+@def itemOverColor value('theme.datePicker.itemOverColor');
+@def itemOverBackgroundColor value('theme.datePicker.itemOverBackgroundColor');
+
+@def itemSelectedBorderWidth value('theme.datePicker.itemSelectedBorder.toString');
+@def itemSelectedBorderStyle value('theme.datePicker.itemSelectedBorder.style');
+@def itemSelectedBorderColor value('theme.datePicker.itemSelectedBorder.color');
+@def itemSelectedBackgroundColor value('theme.datePicker.itemSelectedBackgroundColor');
+
+@def itemSelectedColor value('theme.datePicker.itemSelectedText.color');
+@def itemSelectedFontFamily value('theme.datePicker.itemSelectedText.family');
+@def itemSelectedFontSize value('theme.datePicker.itemSelectedText.size');
+@def itemSelectedFontWeight value('theme.datePicker.itemSelectedText.weight');
+
+@def todayBorderWidth value('theme.datePicker.todayBorder.toString');
+@def todayBorderStyle value('theme.datePicker.todayBorder.style');
+@def todayBorderColor value('theme.datePicker.todayBorder.color');
+
+@def footerPadding value('theme.datePicker.footerPadding.toString');
+@def footerBackgroundColor value('theme.datePicker.footerBackgroundColor');
+
+@def buttonMargin value('theme.datePicker.buttonMargin.toString');
+
+.datePicker {
+ border-width: borderWidth;
+ border-style: borderStyle;
+ border-color: borderColor;
+ background-color: backgroundColor;
+ -moz-outline: 0 none;
+ outline: 0 none;
+ width: datePickerWidth;
+}
+
+ /* header */
+.header {
+ padding: headerPadding;
+ text-align: center;
+ background-image: none;
+ background-color: headerBackgroundColor;
+}
+
+@sprite .monthLeftButton {
+ gwt-image: "leftButton";
+ cursor: pointer;
+}
+
+.monthButton {
+ cursor: pointer;
+}
+
+.monthLeft {
+}
+
+.middle {
+ width: 100%;
+}
+
+.monthRight {
+}
+
+@sprite .downIcon {
+ gwt-image: "downIcon";
+}
+
+@sprite .monthRightButton {
+ gwt-image: "rightButton";
+ cursor: pointer;
+}
+
+.monthButtonText {
+ color: headerFontColor;
+ font-size: headerFontSize;
+ font-weight: headerFontWeight;
+ font-family: headerFontFamily;
+ padding: headerTextPadding;
+}
+
+ /* end header */
+
+ /* calendar */
+.daysWrap {
+}
+
+.columnHeader {
+ color: columnHeaderColor;
+ font-family: columnHeaderFontFamily;
+ font-size: columnHeaderFontSize;
+ font-weight: columnHeaderFontWeight;
+ text-align: right;
+ background-image: none;
+ background-color: columnHeaderBackgroundColor;
+}
+
+.columnHeaderInner {
+ line-height: columnHeaderLineHeight;
+ padding: columnHeaderPadding;
+}
+
+.date {
+ padding: 0;
+
+ text-align: right;
+ border-width: dayBorderWidth;
+ border-style: dayBorderStyle;
+ border-color: dayBorderColor;
+}
+
+.dateAnchor {
+ display: block;
+ zoom: 1;
+ text-decoration: none;
+
+ padding: dayPadding;
+ color: dayColor;
+ font-family: dayFontFamily;
+ font-size: dayFontSize;
+ font-weight: dayFontWeight;
+
+ cursor: pointer;
+ line-height: dayLineHeight;
+}
+
+.dateActive {
+}
+
+.dateNext .dateAnchor {
+ background-color: dayNextBackgroundColor;
+ color: dayNextColor;
+ font-family: dayNextFontFamily;
+ font-size: dayNextFontSize;
+ font-weight: dayNextFontWeight;
+}
+
+.dateOver .dateAnchor {
+ color: itemOverColor;
+ background-color: itemOverBackgroundColor;
+}
+
+.datePrevious .dateAnchor {
+ background-color: dayPreviousBackgroundColor;
+ color: dayPreviousColor;
+ font-family: dayPreviousFontFamily;
+ font-size: dayPreviousFontSize;
+ font-weight: dayPreviousFontWeight;
+}
+
+.dateDisabled .dateAnchor {
+ background-color: dayDisabledBackgroundColor;
+ cursor: default;
+ color: dayDisabledColor;
+ font-family: dayDisabledFontFamily;
+ font-size: dayDisabledFontSize;
+ font-weight: dayDisabledFontWeight;
+}
+
+.dateSelected {
+ border-style: itemSelectedBorderStyle;
+ border-color: itemSelectedBorderColor;
+ border-width: itemSelectedBorderWidth;
+}
+
+.dateSelected .dateAnchor {
+ background-color: itemSelectedBackgroundColor;
+ color: itemSelectedColor;
+ font-family: itemSelectedFontFamily;
+ font-size: itemSelectedFontSize;
+ font-weight: itemSelectedFontWeight;
+}
+
+.dateToday {
+ border-color: todayBorderColor;
+ border-style: todayBorderStyle;
+ border-width: todayBorderWidth;
+}
+
+ /* end calendar */
+
+ /* footer */
+.bottom {
+ padding: footerPadding;
+ background-image: none;
+ background-color: footerBackgroundColor;
+ text-align: center;
+}
+
+ /* end footer */
+
+ /* month picker */
+.monthPicker {
+ border-width: borderWidth;
+ border-style: borderStyle;
+ border-color: borderColor;
+ background-color: backgroundColor;
+}
+
+@sprite .leftYearIcon {
+ gwt-image: "leftIcon";
+ cursor: pointer;
+}
+
+@sprite .rightYearIcon {
+ gwt-image: "rightIcon";
+ cursor: pointer;
+}
+
+.monthPickerItem {
+ /*margin: 5px 0 5px;
+ padding: 5px 0 5px;*/
+ font-family: dayFontFamily;
+ font-size: dayFontSize;
+ font-weight: dayFontWeight;
+ text-align: center;
+ width: 25%; /* 4 columns */
+}
+
+.monthPickerItemInner {
+ display: block;
+ text-decoration: none;
+
+ margin: 0 5px 0 5px;
+ color: dayColor;
+ border-width: dayBorderWidth;
+ border-style: dayBorderStyle;
+ border-color: dayBorderColor;
+ line-height: dayLineHeight;
+ cursor: pointer;
+}
+
+.monthPickerItemInner:hover {
+ background-color: itemOverBackgroundColor;
+}
+
+.month {
+
+}
+
+.monthSep {
+ border-right-width: 1px;
+ border-right-style: borderStyle;
+ border-right-color: borderColor;
+}
+
+.monthSelected .monthPickerItemInner {
+ background-color: itemSelectedBackgroundColor;
+ border-width: itemSelectedBorderWidth;
+ border-style: itemSelectedBorderStyle;
+ border-color: itemSelectedBorderColor;
+ color: itemSelectedColor;
+ font-family: itemSelectedFontFamily;
+ font-size: itemSelectedFontSize;
+ font-weight: itemSelectedFontWeight;
+}
+
+.year {
+
+}
+
+.yearButton {
+
+}
+
+.monthButtons {
+ width: 100%;
+
+ background-image: none;
+ background-color: footerBackgroundColor;
+ text-align: center;
+}
+
+.cancel {
+ display: inline;
+ margin: buttonMargin;
+}
+
+.ok {
+ display: inline;
+ margin: buttonMargin;
+}
+
+ /* end month picker */
+
+
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/widget/Css3DatePickerAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/widget/Css3DatePickerAppearance.java
new file mode 100644
index 0000000..aebd175
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/widget/Css3DatePickerAppearance.java
@@ -0,0 +1,354 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.widget;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.NodeList;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.resources.client.ImageResource.ImageOptions;
+import com.google.gwt.resources.client.ImageResource.RepeatStyle;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.core.client.resources.StyleInjectorHelper;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.DatePicker.DatePickerAppearance;
+import com.sencha.gxt.widget.core.client.DatePicker.DatePickerMessages;
+import com.sencha.gxt.widget.core.client.DatePicker.DateState;
+
+import java.util.List;
+
+/**
+ *
+ */
+public class Css3DatePickerAppearance implements DatePickerAppearance {
+
+ public interface Css3DatePickerResources extends ClientBundle {
+ @Source("Css3DatePicker.css")
+ Css3DatePickerStyle style();
+
+ ThemeDetails theme();
+
+ ImageResource downIcon();
+
+ ImageResource leftButton();
+
+ @ImageOptions(repeatStyle = RepeatStyle.None)
+ @Source("leftButton.png")
+ ImageResource leftIcon();
+
+ ImageResource rightButton();
+
+ @ImageOptions(repeatStyle = RepeatStyle.None)
+ @Source("rightButton.png")
+ ImageResource rightIcon();
+ }
+
+ public interface Css3DatePickerStyle extends CssResource {
+ String columnHeader();
+
+ String columnHeaderInner();
+
+ String date();
+
+ String dateAnchor();
+
+ String dateActive();
+
+ String dateDisabled();
+
+ String dateNext();
+
+ String dateOver();
+
+ String datePicker();
+
+ String datePrevious();
+
+ String dateSelected();
+
+ String dateToday();
+
+ String leftYearIcon();
+
+ String middle();
+
+ String month();
+
+ String monthPickerItem();
+
+ String monthPickerItemInner();
+
+ String monthSep();
+
+ String monthSelected();
+
+ String year();
+
+ String yearButton();
+
+ String monthButtons();
+
+ String monthLeft();
+
+ String monthRight();
+
+ String monthButton();
+
+ String monthButtonText();
+
+ String monthLeftButton();
+
+ String monthRightButton();
+
+ String rightYearIcon();
+
+ String daysWrap();
+
+ String bottom();
+
+ String header();
+
+ String monthPicker();
+
+ String downIcon();
+
+ String cancel();
+
+ String ok();
+ }
+
+ private final Css3DatePickerResources resources;
+ private final Css3DatePickerStyle style;
+
+ public Css3DatePickerAppearance() {
+ this(GWT.create(Css3DatePickerResources.class));
+ }
+
+ public Css3DatePickerAppearance(Css3DatePickerResources resources) {
+ this.resources = resources;
+ this.style = resources.style();
+
+ StyleInjectorHelper.ensureInjected(style, true);
+ }
+
+
+ @Override
+ public String dateSelector() {
+ return "." + style.date();
+ }
+
+ @Override
+ public String daySelector() {
+ return "." + style.dateAnchor();
+ }
+
+ @Override
+ public NodeList getDateCells(XElement parent) {
+ return parent.select("." + style.date());
+ }
+
+ @Override
+ public boolean isDisabled(Element cell) {
+ return cell.cast().hasClassName(style.dateDisabled());
+ }
+
+ @Override
+ public String leftMonthSelector() {
+ return "." + style.monthLeftButton();
+ }
+
+ @Override
+ public String leftYearSelector() {
+ return "." + style.leftYearIcon();
+ }
+
+ @Override
+ public String monthButtonSelector() {
+ return "." + style.monthButton();
+ }
+
+ @Override
+ public String monthPickerCancelSelector() {
+ return "." + style.cancel();
+ }
+
+ @Override
+ public String monthPickerMonthSelector() {
+ return "." + style.month();
+ }
+
+ @Override
+ public String monthPickerOkSelector() {
+ return "." + style.ok();
+ }
+
+ @Override
+ public String monthPickerYearSelector() {
+ return "." + style.year();
+ }
+
+ @Override
+ public void onMonthButtonTextChange(XElement parent, String text) {
+ parent.selectNode("." + style.monthButtonText()).setInnerHTML(text);
+ }
+
+ @Override
+ public void onMonthSelected(Element cell, boolean select) {
+ cell.cast().setClassName(style.monthSelected(), select);
+ }
+
+ @Override
+ public void onTextChange(Element cell, String text) {
+ cell.getFirstChildElement().setInnerHTML(text);
+ }
+
+ @Override
+ public void onUpdateDateStyle(Element cell, DateState type, boolean add) {
+
+ String cls = "";
+
+ switch (type) {
+ case ACTIVE:
+ cls = style.dateActive();
+ break;
+ case DISABLED:
+ cls = style.dateDisabled();
+ break;
+ case NEXT:
+ cls = style.dateNext();
+ break;
+ case PREVIOUS:
+ cls = style.datePrevious();
+ break;
+ case OVER:
+ cls = style.dateOver();
+ break;
+ case SELECTED:
+ cls = style.dateSelected();
+ break;
+ case TODAY:
+ cls = style.dateToday();
+ break;
+ }
+
+ XElement elem = cell.cast();
+ elem.setClassName(cls, add);
+ }
+
+ @Override
+ public void onUpdateDayOfWeeks(XElement parent, List values) {
+ NodeList elems = parent.select("." + style.columnHeaderInner());
+ for (int i = 0; i < elems.getLength(); i++) {
+ elems.getItem(i).setInnerHTML(values.get(i));
+ }
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder sb) {
+ sb.appendHtmlConstant("");
+
+ sb.appendHtmlConstant("");
+
+ sb.appendHtmlConstant("
");
+ for (int i = 0; i < 7; i++) {
+ sb.appendHtmlConstant("" + i + " | ");
+ }
+ sb.appendHtmlConstant("
");
+
+ sb.appendHtmlConstant("");
+ for (int i = 0; i < 6; i++) {
+ sb.appendHtmlConstant("");
+ for (int j = 0; j < 7; j++) {
+ sb.appendHtmlConstant(" | ");
+ }
+ sb.appendHtmlConstant("
");
+ }
+ sb.appendHtmlConstant("
");
+
+ sb.appendHtmlConstant("
");
+
+ sb.appendHtmlConstant("
");
+
+ }
+
+ @Override
+ public void renderMonthPicker(SafeHtmlBuilder sb, DatePickerMessages messages, String[] monthNames) {
+ sb.appendHtmlConstant("");
+ }
+
+ @Override
+ public String rightMonthSelector() {
+ return "." + style.monthRightButton();
+ }
+
+ @Override
+ public String rightYearSelector() {
+ return "." + style.rightYearIcon();
+ }
+
+ @Override
+ public String todayButtonSelector() {
+ return "." + style.bottom();
+ }
+
+ @Override
+ public void onMonthPickerSize(XElement monthPicker, int width, int height) {
+ int lb = resources.theme().datePicker().border().left();
+ int rb = resources.theme().datePicker().border().right();
+ int borderOffset = lb + rb;
+
+ height = height + borderOffset;
+
+ monthPicker.setTop(-resources.theme().datePicker().border().top());
+ monthPicker.setLeft(-lb);
+ monthPicker.setSize(width + borderOffset, height);
+ monthPicker.getFirstChildElement().getFirstChildElement().cast().setSize(width, height, true);
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/widget/Css3SplitBar.css b/src/com/sencha/gxt/theme/neptune/client/base/widget/Css3SplitBar.css
new file mode 100644
index 0000000..c6e6f6f
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/widget/Css3SplitBar.css
@@ -0,0 +1,103 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def splitBarDragColor value("theme.splitbar.dragColor");
+@def splitBarHandleOpacity value("theme.splitbar.handleOpacity");
+@eval ieFilterOpacity com.sencha.gxt.themebuilder.base.client.CssResourceThemeUtils.opacityToIe8Filter(theme().splitbar().handleOpacity());
+
+@def handleWidth value('theme.splitbar.handleWidth', 'px');
+@eval halfHandleImageHeight "-"+theme().splitbar().handleHeight()/2+"px";
+
+.bar {
+ position: absolute;
+ z-index: 3;
+}
+
+.horizontalBar {
+ cursor: s-resize;
+ cursor: row-resize;
+ font-size: 1px;
+ line-height: 1px;
+ overflow:hidden;
+}
+
+.verticalBar {
+ cursor: e-resize;
+ cursor: col-resize;
+ overflow:hidden;
+}
+
+.proxy {
+ position: absolute;
+ background-color: splitBarDragColor;
+ font-size: 1px;
+ line-height: 1px;
+ z-index: 200;
+}
+
+.mini {
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: block;
+ cursor: pointer;
+ border: 0 none;
+}
+
+@if user.agent ie6 ie8 {
+ .mini {
+ -ms-filter: ieFilterOpacity;
+ }
+} @else {
+ .mini {
+ opacity: splitBarHandleOpacity;
+ }
+}
+
+.miniOver {
+ opacity:1;
+ filter:none;
+}
+
+@if user.agent ie6 ie8 {
+ .miniOver {
+ filter: none;
+ }
+} @else {
+ .miniOver {
+ opacity: 1;
+ }
+}
+
+@sprite .miniRight {
+ gwt-image: 'miniRight';
+}
+
+@sprite .miniLeft {
+ gwt-image: 'miniLeft';
+}
+
+@sprite .miniTop {
+ gwt-image: 'miniTop';
+}
+
+@sprite .miniBottom {
+ gwt-image: 'miniBottom';
+}
+
+.miniTop,.miniBottom {
+ height: handleWidth;
+ left: 50%;
+ margin-left: halfHandleImageHeight;
+}
+
+.miniLeft,.miniRight {
+ padding: 0;
+ width: handleWidth;
+ top: 50%;
+ margin-top: halfHandleImageHeight;
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/widget/Css3SplitBarAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/widget/Css3SplitBarAppearance.java
new file mode 100644
index 0000000..3bd7ded
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/widget/Css3SplitBarAppearance.java
@@ -0,0 +1,131 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.widget;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.core.client.Style.Direction;
+import com.sencha.gxt.core.client.Style.LayoutRegion;
+import com.sencha.gxt.core.client.dom.XElement;
+import com.sencha.gxt.core.client.resources.StyleInjectorHelper;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+import com.sencha.gxt.widget.core.client.SplitBar.SplitBarAppearance;
+
+/**
+ *
+ */
+public class Css3SplitBarAppearance implements SplitBarAppearance {
+
+ private Css3SplitBarResources resources;
+
+ public interface Css3SplitBarResources extends ClientBundle {
+ @Source("Css3SplitBar.css")
+ Css3SplitBarStyle style();
+
+ ThemeDetails theme();
+
+ ImageResource miniBottom();
+
+ ImageResource miniLeft();
+
+ ImageResource miniRight();
+
+ ImageResource miniTop();
+ }
+
+ public interface Css3SplitBarStyle extends CssResource {
+ String bar();
+
+ String horizontalBar();
+
+ String mini();
+
+ String miniBottom();
+
+ String miniLeft();
+
+ String miniOver();
+
+ String miniRight();
+
+ String miniTop();
+
+ String proxy();
+
+ String verticalBar();
+ }
+
+ private final Css3SplitBarStyle style;
+
+ public Css3SplitBarAppearance() {
+ this(GWT.create(Css3SplitBarResources.class));
+ }
+
+ public Css3SplitBarAppearance(Css3SplitBarResources resources) {
+ this.resources = resources;
+ this.style = resources.style();
+
+ StyleInjectorHelper.ensureInjected(style, true);
+ }
+
+ @Override
+ public int getDefaultBarWidth() {
+ return resources.theme().splitbar().handleWidth();
+ }
+
+ @Override
+ public String miniClass(Direction direction) {
+ String cls = style.mini();
+
+ switch (direction) {
+ case UP:
+ cls += " " + style.miniTop();
+ break;
+ case DOWN:
+ cls += " " + style.miniBottom();
+ break;
+ case LEFT:
+ cls += " " + style.miniLeft();
+ break;
+ case RIGHT:
+ cls += " " + style.miniRight();
+ break;
+ }
+
+ return cls;
+ }
+
+ @Override
+ public String miniSelector() {
+ return "." + style.mini();
+ }
+
+ @Override
+ public void onMiniOver(XElement mini, boolean over) {
+ mini.setClassName(style.miniOver(), over);
+ }
+
+ @Override
+ public String proxyClass() {
+ return style.proxy();
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder sb, LayoutRegion region) {
+ String cls = "";
+ if (region == LayoutRegion.SOUTH || region == LayoutRegion.NORTH) {
+ cls = style.horizontalBar();
+ } else {
+ cls = style.verticalBar();
+ }
+ sb.appendHtmlConstant("");
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/widget/downIcon.png b/src/com/sencha/gxt/theme/neptune/client/base/widget/downIcon.png
new file mode 100644
index 0000000..8cfc8fe
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/widget/downIcon.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/widget/leftButton.png b/src/com/sencha/gxt/theme/neptune/client/base/widget/leftButton.png
new file mode 100644
index 0000000..d0c1732
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/widget/leftButton.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/widget/miniBottom.png b/src/com/sencha/gxt/theme/neptune/client/base/widget/miniBottom.png
new file mode 100644
index 0000000..69153b9
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/widget/miniBottom.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/widget/miniLeft.png b/src/com/sencha/gxt/theme/neptune/client/base/widget/miniLeft.png
new file mode 100644
index 0000000..75c0a98
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/widget/miniLeft.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/widget/miniRight.png b/src/com/sencha/gxt/theme/neptune/client/base/widget/miniRight.png
new file mode 100644
index 0000000..a81105f
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/widget/miniRight.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/widget/miniTop.png b/src/com/sencha/gxt/theme/neptune/client/base/widget/miniTop.png
new file mode 100644
index 0000000..d1b4ff1
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/widget/miniTop.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/widget/rightButton.png b/src/com/sencha/gxt/theme/neptune/client/base/widget/rightButton.png
new file mode 100644
index 0000000..749a5da
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/base/widget/rightButton.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/window/Css3Window.css b/src/com/sencha/gxt/theme/neptune/client/base/window/Css3Window.css
new file mode 100644
index 0000000..b02af24
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/window/Css3Window.css
@@ -0,0 +1,58 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def borderRadius value('theme.window.borderRadius','px');
+@def borderWidth value('theme.window.border');
+@def borderColor value('theme.window.border.color');
+@def borderStyle value('theme.window.border.style');
+@def headerBackgroundColor value('theme.window.headerBackgroundColor');
+@def headerGradient value('theme.window.headerGradient');
+@def headerPadding value('theme.window.headerPadding.toString');
+@def backgroundColor value('theme.window.backgroundColor');
+
+.panel {
+ border-radius: borderRadius;
+
+ border-width: borderWidth;
+ border-style: borderStyle;
+ background-color: backgroundColor;
+ border-color: borderColor;
+ outline: none;
+
+ padding: 0;
+ overflow:hidden;
+}
+
+.body {
+ border: none;
+}
+
+.noHeader {
+
+}
+
+.header {
+ background: -webkit-linear-gradient(top, headerGradient); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, headerGradient); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, headerGradient); /* IE10+ */
+ background: linear-gradient(to bottom, headerGradient); /* W3C */
+
+ padding: headerPadding;
+}
+
+.footer {
+ clear:both;
+}
+
+.bodyWrap {
+ position:relative;
+}
+
+.ghost ul {
+ background-color: #CDD9E8;
+ border-color: #90a4c4;
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/base/window/Css3WindowAppearance.java b/src/com/sencha/gxt/theme/neptune/client/base/window/Css3WindowAppearance.java
new file mode 100644
index 0000000..9bed2d8
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/base/window/Css3WindowAppearance.java
@@ -0,0 +1,45 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.base.window;
+
+import com.google.gwt.core.client.GWT;
+import com.sencha.gxt.theme.neptune.client.base.panel.Css3FramedPanelAppearance;
+import com.sencha.gxt.widget.core.client.Window.WindowAppearance;
+
+public class Css3WindowAppearance extends Css3FramedPanelAppearance implements WindowAppearance {
+
+ public interface Css3WindowResources extends Css3FramedPanelResources {
+ @Override
+ @Source("Css3Window.css")
+ Css3WindowStyle style();
+ }
+
+ public interface Css3WindowStyle extends Css3FramedPanelStyle {
+ String ghost();
+ }
+ private final Css3WindowResources resources;
+
+ private final Css3WindowStyle style;
+
+ public Css3WindowAppearance() {
+ this(GWT. create(Css3WindowResources.class),
+ GWT. create(FramedPanelTemplate.class));
+ }
+
+ public Css3WindowAppearance(Css3WindowResources resources, FramedPanelTemplate template) {
+ super(resources, template);
+ this.resources = resources;
+ this.style = this.resources.style();
+ }
+
+ @Override
+ public String ghostClass() {
+ return style.ghost();
+ }
+
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/SlicedButtonCell.css b/src/com/sencha/gxt/theme/neptune/client/sliced/button/SlicedButtonCell.css
new file mode 100644
index 0000000..6650b91
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/sliced/button/SlicedButtonCell.css
@@ -0,0 +1,51 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def padding value('theme.button.padding.toString');
+
+@def fontSize value('theme.button.font.size');
+@def fontFamily value('theme.button.font.family');
+@def fontWeight value('theme.button.font.weight');
+@def fontColor value('theme.button.font.color');
+
+@def smallFontSize value('theme.button.smallFontSize','px');
+@def mediumFontSize value('theme.button.mediumFontSize','px');
+@def largeFontSize value('theme.button.largeFontSize','px');
+@def smallLineHeight value('theme.button.smallLineHeight','px');
+@def mediumLineHeight value('theme.button.mediumLineHeight','px');
+@def largeLineHeight value('theme.button.largeLineHeight','px');
+
+
+.text {
+ padding: padding;
+ text-align: center;
+ font-size: fontSize;
+ color: fontColor;
+ font-weight: fontWeight;
+ font-family: fontFamily;
+}
+
+
+
+.small .text {
+ line-height: smallLineHeight;
+ font-size: smallFontSize;
+}
+
+.medium .text {
+ line-height: mediumLineHeight;
+ font-size: mediumFontSize;
+}
+
+.large .text {
+ line-height: largeLineHeight;
+ font-size: largeFontSize;
+}
+
+.iconWrap {
+ padding: 0px;
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/SlicedButtonCellAppearance.java b/src/com/sencha/gxt/theme/neptune/client/sliced/button/SlicedButtonCellAppearance.java
new file mode 100644
index 0000000..591ebdc
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/sliced/button/SlicedButtonCellAppearance.java
@@ -0,0 +1,280 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.sliced.button;
+
+import com.google.gwt.cell.client.Cell.Context;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.resources.client.ImageResource.ImageOptions;
+import com.google.gwt.resources.client.ImageResource.RepeatStyle;
+import com.google.gwt.safecss.shared.SafeStylesBuilder;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.google.gwt.safehtml.shared.SafeHtmlUtils;
+import com.sencha.gxt.cell.core.client.ButtonCell;
+import com.sencha.gxt.cell.core.client.ButtonCell.ButtonScale;
+import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign;
+import com.sencha.gxt.cell.core.client.SplitButtonCell;
+import com.sencha.gxt.core.client.GXT;
+import com.sencha.gxt.core.client.resources.CommonStyles;
+import com.sencha.gxt.core.client.util.TextMetrics;
+import com.sencha.gxt.theme.base.client.button.ButtonCellDefaultAppearance;
+import com.sencha.gxt.theme.base.client.frame.Frame;
+import com.sencha.gxt.theme.base.client.frame.TableFrame;
+import com.sencha.gxt.theme.neptune.client.ThemeDetails;
+
+public class SlicedButtonCellAppearance extends ButtonCellDefaultAppearance {
+
+ public interface SlicedButtonCellResources extends ButtonCellResources {
+ @Override
+ @Source({"com/sencha/gxt/theme/base/client/button/ButtonCell.css", "SlicedButtonCell.css", "SlicedToolBarButtonCell.css"})
+ SlicedButtonCellStyle style();
+
+ @ImageOptions(repeatStyle = RepeatStyle.None)
+ @Source("com/sencha/gxt/theme/neptune/client/base/button/arrow.png")
+ ImageResource arrow();
+
+ @ImageOptions(repeatStyle = RepeatStyle.None)
+ @Source("com/sencha/gxt/theme/neptune/client/base/button/arrowBottom.png")
+ ImageResource arrowBottom();
+
+ @ImageOptions(repeatStyle = RepeatStyle.None)
+ @Source("com/sencha/gxt/theme/neptune/client/base/button/split.png")
+ ImageResource split();
+
+ @ImageOptions(repeatStyle = RepeatStyle.None)
+ @Source("com/sencha/gxt/theme/neptune/client/base/button/splitBottom.png")
+ ImageResource splitBottom();
+
+
+ @ImageOptions(repeatStyle = RepeatStyle.None)
+ @Source("com/sencha/gxt/theme/neptune/client/base/button/toolBarArrow.png")
+ ImageResource toolBarArrow();
+
+ @ImageOptions(repeatStyle = RepeatStyle.None)
+ @Source("com/sencha/gxt/theme/neptune/client/base/button/toolBarArrowBottom.png")
+ ImageResource toolBarArrowBottom();
+
+ @ImageOptions(repeatStyle = RepeatStyle.None)
+ @Source("com/sencha/gxt/theme/neptune/client/base/button/toolBarButtonSplit.png")
+ ImageResource toolBarSplit();
+
+ @ImageOptions(repeatStyle = RepeatStyle.None)
+ @Source("com/sencha/gxt/theme/neptune/client/base/button/toolBarButtonSplitBottom.png")
+ ImageResource toolBarSplitBottom();
+
+
+ ThemeDetails theme();
+ }
+
+ public interface SlicedButtonCellStyle extends ButtonCellStyle {
+
+ }
+
+ public SlicedButtonCellAppearance() {
+ this(GWT.create(SlicedButtonCellResources.class));
+ }
+
+ public SlicedButtonCellAppearance(SlicedButtonCellResources resources) {
+ super(resources, GWT.create(ButtonCellTemplates.class), new TableFrame(
+ GWT.create(SlicedButtonCellTableFrameResources.class)));
+ }
+
+
+ @Override
+ public void render(final ButtonCell cell, Context context, C value, SafeHtmlBuilder sb) {
+ String constantHtml = cell.getHTML();
+ boolean hasConstantHtml = constantHtml != null && constantHtml.length() != 0;
+ boolean isBoolean = value != null && value instanceof Boolean;
+ // is a boolean always a toggle button?
+ String text = hasConstantHtml ? cell.getText() : (value != null && !isBoolean)
+ ? SafeHtmlUtils.htmlEscape(value.toString()) : "";
+
+ ImageResource icon = cell.getIcon();
+ IconAlign iconAlign = cell.getIconAlign();
+
+ String cls = style.button();
+ String arrowCls = "";
+ if (cell.getMenu() != null) {
+
+ if (cell instanceof SplitButtonCell) {
+ switch (cell.getArrowAlign()) {
+ case RIGHT:
+ arrowCls = style.split();
+ break;
+ case BOTTOM:
+ arrowCls = style.splitBottom();
+ break;
+ default:
+ // empty
+ }
+
+ } else {
+ switch (cell.getArrowAlign()) {
+ case RIGHT:
+ arrowCls = style.arrow();
+ break;
+ case BOTTOM:
+ arrowCls = style.arrowBottom();
+ break;
+ }
+ }
+
+ }
+
+ ButtonScale scale = cell.getScale();
+
+ switch (scale) {
+ case SMALL:
+ cls += " " + style.small();
+ break;
+ case MEDIUM:
+ cls += " " + style.medium();
+ break;
+ case LARGE:
+ cls += " " + style.large();
+ break;
+ default:
+ // empty
+ }
+
+ SafeStylesBuilder stylesBuilder = new SafeStylesBuilder();
+
+ int width = -1;
+
+ if (cell.getWidth() != -1) {
+ int w = cell.getWidth();
+ if (w < cell.getMinWidth()) {
+ w = cell.getMinWidth();
+ }
+ stylesBuilder.appendTrustedString("width:" + w + "px;");
+ cls += " " + style.hasWidth() + " x-has-width";
+ width = w;
+ } else {
+
+ if (cell.getMinWidth() != -1) {
+ TextMetrics.get().bind(style.text());
+ @SuppressWarnings("unused")
+ int length = TextMetrics.get().getWidth(text);
+ length += 6; // frames
+
+ if (icon != null) {
+ switch (iconAlign) {
+ case LEFT:
+ case RIGHT:
+ length += icon.getWidth();
+ break;
+ default:
+ // empty
+ }
+ }
+ }
+ }
+
+ final int height = cell.getHeight();
+ if (height != -1) {
+ stylesBuilder.appendTrustedString("height:" + height + "px;");
+ }
+
+ if (icon != null) {
+ switch (iconAlign) {
+ case TOP:
+ arrowCls += " " + style.iconTop();
+ break;
+ case BOTTOM:
+ arrowCls += " " + style.iconBottom();
+ break;
+ case LEFT:
+ arrowCls += " " + style.iconLeft();
+ break;
+ case RIGHT:
+ arrowCls += " " + style.iconRight();
+ break;
+ }
+
+ } else {
+ arrowCls += " " + style.noIcon();
+ }
+
+ // toggle button
+ if (value == Boolean.TRUE) {
+ cls += " " + frame.pressedClass();
+ }
+
+ sb.append(templates.outer(cls, new SafeStylesBuilder().toSafeStyles()));
+
+ SafeHtmlBuilder inside = new SafeHtmlBuilder();
+
+ String innerWrap = arrowCls;
+ if (GXT.isIE6() || GXT.isIE7()) {
+ arrowCls += " " + CommonStyles.get().inlineBlock();
+ }
+
+ inside.appendHtmlConstant("");
+ inside.appendHtmlConstant("
");
+
+ boolean hasText = text != null && !text.equals("");
+
+ if (icon != null) {
+ switch (iconAlign) {
+ case LEFT:
+ inside.appendHtmlConstant("");
+ writeIcon(inside, icon, height);
+ if (hasText) {
+ int w = width - (icon != null ? icon.getWidth() : 0) - 4;
+ writeText(inside, text, w, height);
+ }
+ inside.appendHtmlConstant("
");
+ break;
+ case RIGHT:
+ inside.appendHtmlConstant("");
+ if (hasText) {
+ int w = width - (icon != null ? icon.getWidth() : 0) - 4;
+ writeText(inside, text, w, height);
+ }
+ writeIcon(inside, icon, height);
+ inside.appendHtmlConstant("
");
+ break;
+ case TOP:
+ inside.appendHtmlConstant("");
+ writeIcon(inside, icon, height);
+ inside.appendHtmlConstant("
");
+ if (hasText) {
+ inside.appendHtmlConstant("");
+ writeText(inside, text, width, height);
+ inside.appendHtmlConstant("
");
+ }
+ break;
+ case BOTTOM:
+ if (hasText) {
+ inside.appendHtmlConstant("");
+ writeText(inside, text, width, height);
+ inside.appendHtmlConstant("
");
+ }
+ inside.appendHtmlConstant("");
+ writeIcon(inside, icon, height);
+ inside.appendHtmlConstant("
");
+ break;
+ }
+
+ } else {
+ inside.appendHtmlConstant("");
+ if (text != null) {
+ writeText(inside, text, width, height);
+ }
+ inside.appendHtmlConstant("
");
+ }
+ inside.appendHtmlConstant("
");
+ inside.appendHtmlConstant("
");
+
+ frame.render(sb, new Frame.FrameOptions(0, CommonStyles.get().noFocusOutline(), stylesBuilder.toSafeStyles()),
+ inside.toSafeHtml());
+
+ sb.appendHtmlConstant(" ");
+
+ }
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/SlicedButtonCellTableFrameResources.java b/src/com/sencha/gxt/theme/neptune/client/sliced/button/SlicedButtonCellTableFrameResources.java
new file mode 100644
index 0000000..d7c907f
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/sliced/button/SlicedButtonCellTableFrameResources.java
@@ -0,0 +1,150 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.sliced.button;
+
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.resources.client.ImageResource.ImageOptions;
+import com.google.gwt.resources.client.ImageResource.RepeatStyle;
+import com.sencha.gxt.theme.base.client.button.ButtonTableFrameResources;
+import com.sencha.gxt.theme.base.client.frame.TableFrame.TableFrameStyle;
+
+/**
+ *
+ */
+public interface SlicedButtonCellTableFrameResources extends SlicedToolBarButtonCellTableFrameResources, ButtonTableFrameResources {
+ public interface TableFrameStyleSliced extends TableFrameStyle {
+ }
+
+ @Override
+ @Source({"com/sencha/gxt/theme/base/client/frame/TableFrame.css", "SlicedButtonTableFrame.css", "SlicedToolBarButtonTableFrame.css"})
+ TableFrameStyleSliced style();
+
+ @Override
+ @Source("button-background.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ ImageResource background();
+
+ @Override
+ @Source("button-over-background.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ ImageResource backgroundOverBorder();
+
+ @Override
+ @Source("button-pressed-background.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ ImageResource backgroundPressedBorder();
+
+ @Override
+ @Source("button-tl.png")
+ ImageResource topLeftBorder();
+
+ @Override
+ @Source("button-over-tl.png")
+ ImageResource topLeftOverBorder();
+
+ @Override
+ @Source("button-pressed-tl.png")
+ ImageResource topLeftPressedBorder();
+
+ @Override
+ @Source("button-tc.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ ImageResource topBorder();
+
+ @Override
+ @Source("button-over-tc.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ ImageResource topOverBorder();
+
+ @Override
+ @Source("button-pressed-tc.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ ImageResource topPressedBorder();
+
+ @Override
+ @Source("button-tr.png")
+ ImageResource topRightBorder();
+
+ @Override
+ @Source("button-over-tr.png")
+ ImageResource topRightOverBorder();
+
+ @Override
+ @Source("button-pressed-tr.png")
+ ImageResource topRightPressedBorder();
+
+ @Override
+ @Source("button-l.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Vertical)
+ ImageResource leftBorder();
+
+ @Override
+ @Source("button-over-l.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Vertical)
+ ImageResource leftOverBorder();
+
+ @Override
+ @Source("button-pressed-l.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Vertical)
+ ImageResource leftPressedBorder();
+
+ @Override
+ @Source("button-r.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Vertical)
+ ImageResource rightBorder();
+
+ @Override
+ @Source("button-over-r.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Vertical)
+ ImageResource rightOverBorder();
+
+ @Override
+ @Source("button-pressed-r.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Vertical)
+ ImageResource rightPressedBorder();
+
+ @Override
+ @Source("button-bl.png")
+ ImageResource bottomLeftBorder();
+
+ @Override
+ @Source("button-over-bl.png")
+ ImageResource bottomLeftOverBorder();
+
+ @Override
+ @Source("button-pressed-bl.png")
+ ImageResource bottomLeftPressedBorder();
+
+
+ @Override
+ @Source("button-bc.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ ImageResource bottomBorder();
+
+ @Override
+ @Source("button-over-bc.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ ImageResource bottomOverBorder();
+
+ @Override
+ @Source("button-pressed-bc.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ ImageResource bottomPressedBorder();
+
+ @Override
+ @Source("button-br.png")
+ ImageResource bottomRightBorder();
+
+ @Override
+ @Source("button-over-br.png")
+ ImageResource bottomRightOverBorder();
+
+ @Override
+ @Source("button-pressed-br.png")
+ ImageResource bottomRightPressedBorder();
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/SlicedButtonTableFrame.css b/src/com/sencha/gxt/theme/neptune/client/sliced/button/SlicedButtonTableFrame.css
new file mode 100644
index 0000000..f3c4e11
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/sliced/button/SlicedButtonTableFrame.css
@@ -0,0 +1,127 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+
+ /* over style */
+
+@sprite .over .content {
+ gwt-image: 'backgroundOverBorder';
+ height: 100%;
+ width: 100%;
+}
+
+@sprite .over .topLeft {
+ gwt-image: 'topLeftOverBorder';
+}
+
+@sprite .over .top {
+ gwt-image: 'topOverBorder';
+}
+
+@sprite .over .topRight {
+ gwt-image: 'topRightOverBorder';
+}
+
+@sprite .over .bottomLeft {
+ gwt-image: 'bottomLeftOverBorder';
+}
+
+@sprite .over .bottom {
+ gwt-image: 'bottomOverBorder';
+}
+
+@sprite .over .right {
+ gwt-image: 'rightOverBorder';
+}
+
+@sprite .over .bottomRight {
+ gwt-image: 'bottomRightOverBorder';
+}
+
+@sprite .over .left {
+ gwt-image: 'leftOverBorder';
+}
+
+ /* focus */
+
+@sprite .focus .content {
+ gwt-image: 'backgroundOverBorder';
+ height: 100%;
+ width: 100%;
+}
+
+@sprite .focus .topLeft {
+ gwt-image: 'topLeftOverBorder';
+}
+
+@sprite .focus .top {
+ gwt-image: 'topOverBorder';
+}
+
+@sprite .focus .topRight {
+ gwt-image: 'topRightOverBorder';
+}
+
+@sprite .focus .bottomLeft {
+ gwt-image: 'bottomLeftOverBorder';
+}
+
+@sprite .focus .bottom {
+ gwt-image: 'bottomOverBorder';
+}
+
+@sprite .focus .right {
+ gwt-image: 'rightOverBorder';
+}
+
+@sprite .focus .bottomRight {
+ gwt-image: 'bottomRightOverBorder';
+}
+
+@sprite .focus .left {
+ gwt-image: 'leftOverBorder';
+}
+
+ /* pressed style */
+
+@sprite .pressed .content {
+ gwt-image: 'backgroundPressedBorder';
+ height: 100%;
+ width: 100%;
+}
+
+@sprite .pressed .topLeft {
+ gwt-image: 'topLeftPressedBorder';
+}
+
+@sprite .pressed .top {
+ gwt-image: 'topPressedBorder';
+}
+
+@sprite .pressed .topRight {
+ gwt-image: 'topRightPressedBorder';
+}
+
+@sprite .pressed .bottomLeft {
+ gwt-image: 'bottomLeftPressedBorder';
+}
+
+@sprite .pressed .bottom {
+ gwt-image: 'bottomPressedBorder';
+}
+
+@sprite .pressed .right {
+ gwt-image: 'rightPressedBorder';
+}
+
+@sprite .pressed .bottomRight {
+ gwt-image: 'bottomRightPressedBorder';
+}
+
+@sprite .pressed .left {
+ gwt-image: 'leftPressedBorder';
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/SlicedToolBarButtonCell.css b/src/com/sencha/gxt/theme/neptune/client/sliced/button/SlicedToolBarButtonCell.css
new file mode 100644
index 0000000..1d5aa40
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/sliced/button/SlicedToolBarButtonCell.css
@@ -0,0 +1,116 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@external x-toolbar-mark;
+
+@def tbpadding value('theme.toolbar.buttonOverride.padding.toString');
+
+@def tbfontSize value('theme.toolbar.buttonOverride.font.size');
+@def tbfontFamily value('theme.toolbar.buttonOverride.font.family');
+@def tbfontWeight value('theme.toolbar.buttonOverride.font.weight');
+@def tbfontColor value('theme.toolbar.buttonOverride.font.color');
+
+@def tbsmallFontSize value('theme.toolbar.buttonOverride.smallFontSize','px');
+@def tbmediumFontSize value('theme.toolbar.buttonOverride.mediumFontSize','px');
+@def tblargeFontSize value('theme.toolbar.buttonOverride.largeFontSize','px');
+@def tbsmallLineHeight value('theme.toolbar.buttonOverride.smallLineHeight','px');
+@def tbmediumLineHeight value('theme.toolbar.buttonOverride.mediumLineHeight','px');
+@def tblargeLineHeight value('theme.toolbar.buttonOverride.largeLineHeight','px');
+
+.x-toolbar-mark .text {
+ padding: tbpadding;
+ text-align: center;
+ font-size: tbfontSize;
+ color: tbfontColor;
+ font-weight: tbfontWeight;
+ font-family: tbfontFamily;
+}
+
+.x-toolbar-mark .small .text {
+ line-height: tbsmallLineHeight;
+ font-size: tbsmallFontSize;
+}
+
+.x-toolbar-mark .medium .text {
+ line-height: tbmediumLineHeight;
+ font-size: tbmediumFontSize;
+}
+
+.x-toolbar-mark .large .text {
+ line-height: tblargeLineHeight;
+ font-size: tblargeFontSize;
+}
+
+ /*
+
+ @sprite .x-toolbar-mark .split {
+ gwt-image: 'toolBarSplit';
+ }
+
+
+ @sprite .x-toolbar-mark .splitBottom {
+ gwt-image: 'toolBarSplitBottom';
+ }
+
+
+ @sprite .x-toolbar-mark .arrow {
+ gwt-image: 'toolBarArrow';
+ }
+
+ @sprite .x-toolbar-mark .arrowBottom {
+ gwt-image: 'toolBarArrowBottom';
+ }
+
+ */
+
+@sprite .x-toolbar-mark .split {
+ gwt-image: 'toolBarSplit';
+ width: auto;
+ height: auto;
+}
+
+.x-toolbar-mark .split {
+ background-position: right center;
+ padding-right: 14px;
+ background-repeat: no-repeat;
+}
+
+@sprite .x-toolbar-mark .splitBottom {
+ gwt-image: 'toolBarSplitBottom';
+ width: auto;
+ height: auto;
+}
+
+.x-toolbar-mark .splitBottom {
+ background-position: center bottom;
+ padding-bottom: 14px;
+ background-repeat: no-repeat;
+}
+
+@sprite .x-toolbar-mark .arrow {
+ gwt-image: 'toolBarArrow';
+ width: auto;
+ height: auto;
+}
+
+.x-toolbar-mark .arrow {
+ padding-right: 10px;
+ background-position: right center;
+ background-repeat: no-repeat;
+}
+
+@sprite .x-toolbar-mark .arrowBottom {
+ gwt-image: 'toolBarArrowBottom';
+ width: auto;
+ height: auto;
+}
+
+.x-toolbar-mark .arrowBottom {
+ background-position: center bottom;
+ padding-bottom: 14px;
+ background-repeat: no-repeat;
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/SlicedToolBarButtonCellTableFrameResources.java b/src/com/sencha/gxt/theme/neptune/client/sliced/button/SlicedToolBarButtonCellTableFrameResources.java
new file mode 100644
index 0000000..889f9ee
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/sliced/button/SlicedToolBarButtonCellTableFrameResources.java
@@ -0,0 +1,116 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.sliced.button;
+
+import com.google.gwt.resources.client.ClientBundle.Source;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.resources.client.ImageResource.ImageOptions;
+import com.google.gwt.resources.client.ImageResource.RepeatStyle;
+
+/**
+ *
+ */
+public interface SlicedToolBarButtonCellTableFrameResources {
+
+ @Source("toolbar-button-background.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ ImageResource toolBarBackground();
+
+ @Source("toolbar-button-over-background.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ ImageResource toolBarBackgroundOverBorder();
+
+ @Source("toolbar-button-pressed-background.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ ImageResource toolBarBackgroundPressedBorder();
+
+ @Source("toolbar-button-tl.png")
+ ImageResource toolBarTopLeftBorder();
+
+ @Source("toolbar-button-over-tl.png")
+ ImageResource toolBarTopLeftOverBorder();
+
+ @Source("toolbar-button-pressed-tl.png")
+ ImageResource toolBarTopLeftPressedBorder();
+
+ @Source("toolbar-button-tc.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ ImageResource toolBarTopBorder();
+
+ @Source("toolbar-button-over-tc.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ ImageResource toolBarTopOverBorder();
+
+ @Source("toolbar-button-pressed-tc.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ ImageResource toolBarTopPressedBorder();
+
+ @Source("toolbar-button-tr.png")
+ ImageResource toolBarTopRightBorder();
+
+ @Source("toolbar-button-over-tr.png")
+ ImageResource toolBarTopRightOverBorder();
+
+ @Source("toolbar-button-pressed-tr.png")
+ ImageResource toolBarTopRightPressedBorder();
+
+ @Source("toolbar-button-l.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Vertical)
+ ImageResource toolBarLeftBorder();
+
+ @Source("toolbar-button-over-l.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Vertical)
+ ImageResource toolBarLeftOverBorder();
+
+ @Source("toolbar-button-pressed-l.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Vertical)
+ ImageResource toolBarLeftPressedBorder();
+
+ @Source("toolbar-button-r.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Vertical)
+ ImageResource toolBarRightBorder();
+
+ @Source("toolbar-button-over-r.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Vertical)
+ ImageResource toolBarRightOverBorder();
+
+ @Source("toolbar-button-pressed-r.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Vertical)
+ ImageResource toolBarRightPressedBorder();
+
+ @Source("toolbar-button-bl.png")
+ ImageResource toolBarBottomLeftBorder();
+
+ @Source("toolbar-button-over-bl.png")
+ ImageResource toolBarBottomLeftOverBorder();
+
+ @Source("toolbar-button-pressed-bl.png")
+ ImageResource toolBarBottomLeftPressedBorder();
+
+
+ @Source("toolbar-button-bc.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ ImageResource toolBarBottomBorder();
+
+ @Source("toolbar-button-over-bc.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ ImageResource toolBarBottomOverBorder();
+
+ @Source("toolbar-button-pressed-bc.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ ImageResource toolBarBottomPressedBorder();
+
+ @Source("toolbar-button-br.png")
+ ImageResource toolBarBottomRightBorder();
+
+ @Source("toolbar-button-over-br.png")
+ ImageResource toolBarBottomRightOverBorder();
+
+ @Source("toolbar-button-pressed-br.png")
+ ImageResource toolBarBottomRightPressedBorder();
+}
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/SlicedToolBarButtonTableFrame.css b/src/com/sencha/gxt/theme/neptune/client/sliced/button/SlicedToolBarButtonTableFrame.css
new file mode 100644
index 0000000..cccfb22
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/sliced/button/SlicedToolBarButtonTableFrame.css
@@ -0,0 +1,167 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@external x-toolbar-mark;
+
+ /* normal style */
+@sprite .x-toolbar-mark .content {
+ gwt-image: 'toolBarBackground';
+ height: 100%;
+ width: 100%;
+}
+
+@sprite .x-toolbar-mark .topLeft {
+ gwt-image: 'toolBarTopLeftBorder';
+}
+
+@sprite .x-toolbar-mark .top {
+ gwt-image: 'toolBarTopBorder';
+}
+
+@sprite .x-toolbar-mark .topRight {
+ gwt-image: 'toolBarTopRightBorder';
+}
+
+@sprite .x-toolbar-mark .bottomLeft {
+ gwt-image: 'toolBarBottomLeftBorder';
+}
+
+@sprite .x-toolbar-mark .bottom {
+ gwt-image: 'toolBarBottomBorder';
+}
+
+@sprite .x-toolbar-mark .right {
+ gwt-image: 'toolBarRightBorder';
+}
+
+@sprite .x-toolbar-mark .bottomRight {
+ gwt-image: 'toolBarBottomRightBorder';
+}
+
+@sprite .x-toolbar-mark .left {
+ gwt-image: 'toolBarLeftBorder';
+}
+
+ /* over style */
+
+@sprite .x-toolbar-mark .over .content {
+ gwt-image: 'toolBarBackgroundOverBorder';
+ height: 100%;
+ width: 100%;
+}
+
+@sprite .x-toolbar-mark .over .topLeft {
+ gwt-image: 'toolBarTopLeftOverBorder';
+}
+
+@sprite .x-toolbar-mark .over .top {
+ gwt-image: 'toolBarTopOverBorder';
+}
+
+@sprite .x-toolbar-mark .over .topRight {
+ gwt-image: 'toolBarTopRightOverBorder';
+}
+
+@sprite .x-toolbar-mark .over .bottomLeft {
+ gwt-image: 'toolBarBottomLeftOverBorder';
+}
+
+@sprite .x-toolbar-mark .over .bottom {
+ gwt-image: 'toolBarBottomOverBorder';
+}
+
+@sprite .x-toolbar-mark .over .right {
+ gwt-image: 'toolBarRightOverBorder';
+}
+
+@sprite .x-toolbar-mark .over .bottomRight {
+ gwt-image: 'toolBarBottomRightOverBorder';
+}
+
+@sprite .x-toolbar-mark .over .left {
+ gwt-image: 'toolBarLeftOverBorder';
+}
+
+ /* focus */
+
+@sprite .x-toolbar-mark .focus .content {
+ gwt-image: 'toolBarBackgroundOverBorder';
+ height: 100%;
+ width: 100%;
+}
+
+@sprite .x-toolbar-mark .focus .topLeft {
+ gwt-image: 'toolBarTopLeftOverBorder';
+}
+
+@sprite .x-toolbar-mark .focus .top {
+ gwt-image: 'toolBarTopOverBorder';
+}
+
+@sprite .x-toolbar-mark .focus .topRight {
+ gwt-image: 'toolBarTopRightOverBorder';
+}
+
+@sprite .x-toolbar-mark .focus .bottomLeft {
+ gwt-image: 'toolBarBottomLeftOverBorder';
+}
+
+@sprite .x-toolbar-mark .focus .bottom {
+ gwt-image: 'toolBarBottomOverBorder';
+}
+
+@sprite .x-toolbar-mark .focus .right {
+ gwt-image: 'toolBarRightOverBorder';
+}
+
+@sprite .x-toolbar-mark .focus .bottomRight {
+ gwt-image: 'toolBarBottomRightOverBorder';
+}
+
+@sprite .x-toolbar-mark .focus .left {
+ gwt-image: 'toolBarLeftOverBorder';
+}
+
+ /* pressed style */
+
+@sprite .x-toolbar-mark .pressed .content {
+ gwt-image: 'toolBarBackgroundPressedBorder';
+ height: 100%;
+ width: 100%;
+}
+
+@sprite .x-toolbar-mark .pressed .topLeft {
+ gwt-image: 'toolBarTopLeftPressedBorder';
+}
+
+@sprite .x-toolbar-mark .pressed .top {
+ gwt-image: 'toolBarTopPressedBorder';
+}
+
+@sprite .x-toolbar-mark .pressed .topRight {
+ gwt-image: 'toolBarTopRightPressedBorder';
+}
+
+@sprite .x-toolbar-mark .pressed .bottomLeft {
+ gwt-image: 'toolBarBottomLeftPressedBorder';
+}
+
+@sprite .x-toolbar-mark .pressed .bottom {
+ gwt-image: 'toolBarBottomPressedBorder';
+}
+
+@sprite .x-toolbar-mark .pressed .right {
+ gwt-image: 'toolBarRightPressedBorder';
+}
+
+@sprite .x-toolbar-mark .pressed .bottomRight {
+ gwt-image: 'toolBarBottomRightPressedBorder';
+}
+
+@sprite .x-toolbar-mark .pressed .left {
+ gwt-image: 'toolBarLeftPressedBorder';
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-background.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-background.png
new file mode 100644
index 0000000..88097c9
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-background.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-bc.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-bc.png
new file mode 100644
index 0000000..a8df963
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-bc.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-bl.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-bl.png
new file mode 100644
index 0000000..701ff74
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-bl.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-br.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-br.png
new file mode 100644
index 0000000..6ef8f90
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-br.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-background.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-background.png
new file mode 100644
index 0000000..f55997f
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-background.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-bc.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-bc.png
new file mode 100644
index 0000000..7055165
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-bc.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-bl.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-bl.png
new file mode 100644
index 0000000..e60e44e
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-bl.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-br.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-br.png
new file mode 100644
index 0000000..2612a2a
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-br.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-l.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-l.png
new file mode 100644
index 0000000..fd2824f
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-l.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-r.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-r.png
new file mode 100644
index 0000000..8d7ffdc
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-r.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-tc.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-tc.png
new file mode 100644
index 0000000..322a7bc
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-tc.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-tl.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-tl.png
new file mode 100644
index 0000000..a868b69
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-tl.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-tr.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-tr.png
new file mode 100644
index 0000000..f4cdbd3
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-focus-tr.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-l.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-l.png
new file mode 100644
index 0000000..f7d3250
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-l.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-background.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-background.png
new file mode 100644
index 0000000..f55997f
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-background.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-bc.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-bc.png
new file mode 100644
index 0000000..7055165
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-bc.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-bl.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-bl.png
new file mode 100644
index 0000000..e60e44e
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-bl.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-br.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-br.png
new file mode 100644
index 0000000..2612a2a
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-br.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-l.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-l.png
new file mode 100644
index 0000000..fd2824f
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-l.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-r.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-r.png
new file mode 100644
index 0000000..8d7ffdc
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-r.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-tc.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-tc.png
new file mode 100644
index 0000000..322a7bc
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-tc.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-tl.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-tl.png
new file mode 100644
index 0000000..1a8d19a
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-tl.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-tr.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-tr.png
new file mode 100644
index 0000000..aaacfd9
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-over-tr.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-background.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-background.png
new file mode 100644
index 0000000..ac381d6
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-background.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-bc.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-bc.png
new file mode 100644
index 0000000..59cebe2
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-bc.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-bl.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-bl.png
new file mode 100644
index 0000000..b6c76c2
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-bl.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-br.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-br.png
new file mode 100644
index 0000000..b6d40c5
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-br.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-l.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-l.png
new file mode 100644
index 0000000..0c75b0a
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-l.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-r.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-r.png
new file mode 100644
index 0000000..0fd058a
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-r.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-tc.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-tc.png
new file mode 100644
index 0000000..7cdb951
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-tc.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-tl.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-tl.png
new file mode 100644
index 0000000..10df983
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-tl.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-tr.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-tr.png
new file mode 100644
index 0000000..4e2e9eb
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-pressed-tr.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-r.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-r.png
new file mode 100644
index 0000000..3097a69
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-r.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-tc.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-tc.png
new file mode 100644
index 0000000..6dfdfb7
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-tc.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-tl.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-tl.png
new file mode 100644
index 0000000..f8dbc65
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-tl.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-tr.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-tr.png
new file mode 100644
index 0000000..21c2477
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/button-tr.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-background.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-background.png
new file mode 100644
index 0000000..4f9cca4
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-background.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-bc.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-bc.png
new file mode 100644
index 0000000..5056fca
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-bc.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-bl.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-bl.png
new file mode 100644
index 0000000..d8317e5
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-bl.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-br.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-br.png
new file mode 100644
index 0000000..6963fa8
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-br.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-background.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-background.png
new file mode 100644
index 0000000..e1a5b52
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-background.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-bc.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-bc.png
new file mode 100644
index 0000000..ca1552d
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-bc.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-bl.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-bl.png
new file mode 100644
index 0000000..877d8c4
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-bl.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-br.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-br.png
new file mode 100644
index 0000000..47133a8
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-br.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-l.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-l.png
new file mode 100644
index 0000000..fdd360d
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-l.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-r.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-r.png
new file mode 100644
index 0000000..3890bf2
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-r.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-tc.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-tc.png
new file mode 100644
index 0000000..a2ec562
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-tc.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-tl.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-tl.png
new file mode 100644
index 0000000..a8432c7
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-tl.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-tr.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-tr.png
new file mode 100644
index 0000000..d9bdc4d
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-focus-tr.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-l.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-l.png
new file mode 100644
index 0000000..754e1ae
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-l.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-background.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-background.png
new file mode 100644
index 0000000..e1a5b52
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-background.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-bc.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-bc.png
new file mode 100644
index 0000000..ca1552d
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-bc.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-bl.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-bl.png
new file mode 100644
index 0000000..877d8c4
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-bl.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-br.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-br.png
new file mode 100644
index 0000000..47133a8
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-br.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-l.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-l.png
new file mode 100644
index 0000000..fdd360d
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-l.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-r.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-r.png
new file mode 100644
index 0000000..3890bf2
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-r.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-tc.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-tc.png
new file mode 100644
index 0000000..a2ec562
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-tc.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-tl.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-tl.png
new file mode 100644
index 0000000..a8432c7
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-tl.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-tr.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-tr.png
new file mode 100644
index 0000000..d9bdc4d
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-over-tr.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-background.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-background.png
new file mode 100644
index 0000000..e1df75a
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-background.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-bc.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-bc.png
new file mode 100644
index 0000000..5753d9a
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-bc.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-bl.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-bl.png
new file mode 100644
index 0000000..9237003
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-bl.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-br.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-br.png
new file mode 100644
index 0000000..1b9e709
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-br.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-l.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-l.png
new file mode 100644
index 0000000..5810a02
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-l.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-r.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-r.png
new file mode 100644
index 0000000..edeaa71
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-r.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-tc.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-tc.png
new file mode 100644
index 0000000..27bb6c2
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-tc.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-tl.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-tl.png
new file mode 100644
index 0000000..7d7d1ab
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-tl.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-tr.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-tr.png
new file mode 100644
index 0000000..0320f99
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-pressed-tr.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-r.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-r.png
new file mode 100644
index 0000000..3073dea
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-r.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-tc.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-tc.png
new file mode 100644
index 0000000..128ddcd
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-tc.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-tl.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-tl.png
new file mode 100644
index 0000000..40d2f87
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-tl.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-tr.png b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-tr.png
new file mode 100644
index 0000000..6f12a87
Binary files /dev/null and b/src/com/sencha/gxt/theme/neptune/client/sliced/button/toolbar-button-tr.png differ
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/container/SlicedAccordionLayout.css b/src/com/sencha/gxt/theme/neptune/client/sliced/container/SlicedAccordionLayout.css
new file mode 100644
index 0000000..2dfae16
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/sliced/container/SlicedAccordionLayout.css
@@ -0,0 +1,48 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+@def backgroundColor value('theme.accordionLayout.backgroundColor');
+@def borderColor value('theme.accordionLayout.border.color');
+@def borderStyle value('theme.accordionLayout.border.style');
+@def borderWidth value('theme.accordionLayout.border.toString');
+
+@def headerBackgroundColor value('theme.accordionLayout.headerBackgroundColor');
+@def padding value('theme.accordionLayout.headerPadding');
+
+
+@def headerPadding value('theme.accordionLayout.headerPadding');
+@def headerGradient value('theme.accordionLayout.headerGradient');
+
+.panel {
+ outline: 0 none;
+ border-style: borderStyle;
+ border-width: borderWidth;
+ border-color: borderColor;
+}
+
+@sprite .header {
+ gwt-image: "headerBackground";
+ height:auto;
+ position: relative;
+ /* override gwt-image's overflow:hidden, which adds a few px of height somehow in chrome (and others?) */
+ overflow:visible;
+
+ padding: padding;
+}
+
+.body {
+ background-color: backgroundColor;
+ border: none;
+ overflow: hidden;
+ position: relative;
+}
+
+.footer {
+ position: relative;
+}
+.bodyWrap {
+}
\ No newline at end of file
diff --git a/src/com/sencha/gxt/theme/neptune/client/sliced/container/SlicedAccordionLayoutAppearance.java b/src/com/sencha/gxt/theme/neptune/client/sliced/container/SlicedAccordionLayoutAppearance.java
new file mode 100644
index 0000000..d3076c4
--- /dev/null
+++ b/src/com/sencha/gxt/theme/neptune/client/sliced/container/SlicedAccordionLayoutAppearance.java
@@ -0,0 +1,70 @@
+/**
+ * Sencha GXT 3.1.1 - Sencha for GWT
+ * Copyright(c) 2007-2014, Sencha, Inc.
+ * licensing@sencha.com
+ *
+ * http://www.sencha.com/products/gxt/license/
+ */
+package com.sencha.gxt.theme.neptune.client.sliced.container;
+
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.resources.client.ImageResource.ImageOptions;
+import com.google.gwt.resources.client.ImageResource.RepeatStyle;
+import com.sencha.gxt.theme.neptune.client.base.container.Css3AccordionLayoutAppearance.Css3AccordionHeaderResources;
+import com.sencha.gxt.theme.neptune.client.base.panel.Css3HeaderAppearance;
+import com.sencha.gxt.theme.neptune.client.base.panel.Css3HeaderAppearance.Css3HeaderResources;
+import com.sencha.gxt.theme.neptune.client.base.panel.Css3HeaderAppearance.Css3HeaderStyle;
+import com.sencha.gxt.theme.neptune.client.sliced.panel.SlicedContentPanelAppearance;
+import com.sencha.gxt.widget.core.client.Header.HeaderAppearance;
+import com.sencha.gxt.widget.core.client.button.IconButton.IconConfig;
+import com.sencha.gxt.widget.core.client.button.ToolButton;
+import com.sencha.gxt.widget.core.client.container.AccordionLayoutContainer.AccordionLayoutAppearance;
+
+public class SlicedAccordionLayoutAppearance extends SlicedContentPanelAppearance implements AccordionLayoutAppearance {
+ public interface SlicedAccordionLayoutResources extends SlicedContentPanelResources {
+ @Override
+ @Source("accordionlayout-background.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ ImageResource headerBackground();
+
+ @Override
+ @Source("SlicedAccordionLayout.css")
+ SlicedAccordionLayoutStyle style();
+ }
+ public interface SlicedAccordionLayoutStyle extends SlicedContentPanelStyle {
+
+ }
+
+ public interface SlicedAccordionHeaderResources extends Css3HeaderResources {
+ @Source("accordionlayout-background.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ ImageResource headerBackground();
+
+ @Override
+ @Source({"com/sencha/gxt/theme/base/client/widget/Header.css", "SlicedAccordionHeader.css"})
+ SlicedAccordionHeaderStyle style();
+ }
+ public interface SlicedAccordionHeaderStyle extends Css3HeaderStyle {
+
+ }
+
+ public SlicedAccordionLayoutAppearance() {
+ super(GWT.