summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonatan Kronqvist <jonatan.kronqvist@itmill.com>2010-11-24 13:51:40 +0000
committerJonatan Kronqvist <jonatan.kronqvist@itmill.com>2010-11-24 13:51:40 +0000
commit03aa7bbe0298484db5841da9d8182956d8bca928 (patch)
tree68e849d8791e342a94e5cb15f487656df7abd835
parent32a84eb54bd05c54263cca7d0d1be6899364e1e6 (diff)
downloadvaadin-framework-03aa7bbe0298484db5841da9d8182956d8bca928.tar.gz
vaadin-framework-03aa7bbe0298484db5841da9d8182956d8bca928.zip
Sorting indicator no longer overlaps the column header in tables. #5066 and #2681
The sorting indicator is now placed in its own div element instead of being added as a background picture for the existing header cell element. svn changeset:16130/svn branch:6.5
-rw-r--r--WebContent/VAADIN/themes/base/styles.css36
-rw-r--r--WebContent/VAADIN/themes/base/table/table.css32
-rw-r--r--WebContent/VAADIN/themes/liferay/styles.css45
-rw-r--r--WebContent/VAADIN/themes/liferay/table/table.css9
-rw-r--r--WebContent/VAADIN/themes/reindeer/button/img/black-button-sprites-ie6.pngbin4130 -> 4106 bytes
-rw-r--r--WebContent/VAADIN/themes/reindeer/button/img/button-sprites-ie6.pngbin3970 -> 3968 bytes
-rw-r--r--WebContent/VAADIN/themes/reindeer/common/img/black-vertical-sprites-ie6.pngbin3240 -> 3238 bytes
-rw-r--r--WebContent/VAADIN/themes/reindeer/common/img/vertical-sprites-ie6.pngbin8253 -> 8119 bytes
-rw-r--r--WebContent/VAADIN/themes/reindeer/common/img/vertical-sprites.pngbin23346 -> 23025 bytes
-rw-r--r--WebContent/VAADIN/themes/reindeer/styles.css201
-rw-r--r--WebContent/VAADIN/themes/reindeer/table/table.css41
-rw-r--r--WebContent/VAADIN/themes/runo/styles.css55
-rw-r--r--WebContent/VAADIN/themes/runo/table/table.css19
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java222
-rw-r--r--src/com/vaadin/ui/Table.java7
-rw-r--r--tests/src/com/vaadin/tests/components/table/ColumnHeaderAlignments.java53
16 files changed, 436 insertions, 284 deletions
diff --git a/WebContent/VAADIN/themes/base/styles.css b/WebContent/VAADIN/themes/base/styles.css
index fc8d8d1ae1..625bfc555e 100644
--- a/WebContent/VAADIN/themes/base/styles.css
+++ b/WebContent/VAADIN/themes/base/styles.css
@@ -1,5 +1,5 @@
-.v-theme-version:after {content:"9_9_9_INTERNAL-DEBUG-BUILD";}
-.v-theme-version-9_9_9_INTERNAL-DEBUG-BUILD {display: none;}
+.v-theme-version:after {content:"6_5_0_dev-20101124";}
+.v-theme-version-6_5_0_dev-20101124 {display: none;}
/* Automatically compiled css file from subdirectories. */
.v-absolutelayout-wrapper {
@@ -1523,22 +1523,32 @@ div.v-progressindicator-indeterminate-disabled {
overflow: hidden;
}
.v-table-caption-container {
- float: right;
overflow: hidden;
white-space: nowrap;
- padding-right: 6px;
+ margin-left: 6px;
+}
+.v-table-sort-indicator {
+ width: 0px;
+ height: 1.2em;
+ float: right;
}
-.v-table-header-cell-asc .v-table-caption-container {
+.v-table-header-cell-asc .v-table-sort-indicator,
+.v-table-header-cell-desc .v-table-sort-indicator {
+ width: 16px;
+ height: 1.2em;
+ float: right;
+}
+.v-table-header-cell-asc .v-table-sort-indicator {
background: transparent url(common/img/sprites.png) no-repeat right 6px;
}
-.v-table-header-cell-desc .v-table-caption-container {
+.v-table-header-cell-desc .v-table-sort-indicator {
background: transparent url(common/img/sprites.png) no-repeat right -10px;
}
-.v-table-header-cell-asc .v-table-caption-container-align-right {
- background: transparent url(common/img/sprites.png) no-repeat -8px 6px;
+.v-table-caption-container-align-center {
+ text-align: center;
}
-.v-table-header-cell-desc .v-table-caption-container-align-right {
- background: transparent url(common/img/sprites.png) no-repeat -8px -10px;
+.v-table-caption-container-align-right {
+ text-align: right;
}
.v-table-caption-container .v-icon,
.v-table-header-drag .v-icon {
@@ -1578,6 +1588,12 @@ div.v-progressindicator-indeterminate-disabled {
white-space: nowrap;
overflow: hidden;
}
+.v-table-cell-wrapper-align-center {
+ text-align: center;
+}
+.v-table-cell-wrapper-align-right {
+ text-align: right;
+}
.v-table-column-selector {
float: right;
background: transparent url(common/img/sprites.png) no-repeat 4px -37px;
diff --git a/WebContent/VAADIN/themes/base/table/table.css b/WebContent/VAADIN/themes/base/table/table.css
index 57eeaaf578..0eab1d8974 100644
--- a/WebContent/VAADIN/themes/base/table/table.css
+++ b/WebContent/VAADIN/themes/base/table/table.css
@@ -89,22 +89,32 @@
overflow: hidden;
}
.v-table-caption-container {
- float: right;
overflow: hidden;
white-space: nowrap;
- padding-right: 6px;
+ margin-left: 6px;
}
-.v-table-header-cell-asc .v-table-caption-container {
+.v-table-sort-indicator {
+ width: 0px;
+ height: 1.2em;
+ float: right;
+}
+.v-table-header-cell-asc .v-table-sort-indicator,
+.v-table-header-cell-desc .v-table-sort-indicator {
+ width: 16px;
+ height: 1.2em;
+ float: right;
+}
+.v-table-header-cell-asc .v-table-sort-indicator {
background: transparent url(../common/img/sprites.png) no-repeat right 6px;
}
-.v-table-header-cell-desc .v-table-caption-container {
+.v-table-header-cell-desc .v-table-sort-indicator {
background: transparent url(../common/img/sprites.png) no-repeat right -10px;
}
-.v-table-header-cell-asc .v-table-caption-container-align-right {
- background: transparent url(../common/img/sprites.png) no-repeat -8px 6px;
+.v-table-caption-container-align-center {
+ text-align: center;
}
-.v-table-header-cell-desc .v-table-caption-container-align-right {
- background: transparent url(../common/img/sprites.png) no-repeat -8px -10px;
+.v-table-caption-container-align-right {
+ text-align: right;
}
.v-table-caption-container .v-icon,
.v-table-header-drag .v-icon {
@@ -144,6 +154,12 @@
white-space: nowrap;
overflow: hidden;
}
+.v-table-cell-wrapper-align-center {
+ text-align: center;
+}
+.v-table-cell-wrapper-align-right {
+ text-align: right;
+}
.v-table-column-selector {
float: right;
background: transparent url(../common/img/sprites.png) no-repeat 4px -37px;
diff --git a/WebContent/VAADIN/themes/liferay/styles.css b/WebContent/VAADIN/themes/liferay/styles.css
index a865448ffb..cc53ed5582 100644
--- a/WebContent/VAADIN/themes/liferay/styles.css
+++ b/WebContent/VAADIN/themes/liferay/styles.css
@@ -1,5 +1,5 @@
-.v-theme-version:after {content:"9_9_9_INTERNAL-DEBUG-BUILD";}
-.v-theme-version-9_9_9_INTERNAL-DEBUG-BUILD {display: none;}
+.v-theme-version:after {content:"6_5_0_dev-20101124";}
+.v-theme-version-6_5_0_dev-20101124 {display: none;}
/* Automatically compiled css file from subdirectories. */
.v-absolutelayout-wrapper {
@@ -1523,22 +1523,32 @@ div.v-progressindicator-indeterminate-disabled {
overflow: hidden;
}
.v-table-caption-container {
- float: right;
overflow: hidden;
white-space: nowrap;
- padding-right: 6px;
+ margin-left: 6px;
+}
+.v-table-sort-indicator {
+ width: 0px;
+ height: 1.2em;
+ float: right;
}
-.v-table-header-cell-asc .v-table-caption-container {
+.v-table-header-cell-asc .v-table-sort-indicator,
+.v-table-header-cell-desc .v-table-sort-indicator {
+ width: 16px;
+ height: 1.2em;
+ float: right;
+}
+.v-table-header-cell-asc .v-table-sort-indicator {
background: transparent url(../base/common/img/sprites.png) no-repeat right 6px;
}
-.v-table-header-cell-desc .v-table-caption-container {
+.v-table-header-cell-desc .v-table-sort-indicator {
background: transparent url(../base/common/img/sprites.png) no-repeat right -10px;
}
-.v-table-header-cell-asc .v-table-caption-container-align-right {
- background: transparent url(../base/common/img/sprites.png) no-repeat -8px 6px;
+.v-table-caption-container-align-center {
+ text-align: center;
}
-.v-table-header-cell-desc .v-table-caption-container-align-right {
- background: transparent url(../base/common/img/sprites.png) no-repeat -8px -10px;
+.v-table-caption-container-align-right {
+ text-align: right;
}
.v-table-caption-container .v-icon,
.v-table-header-drag .v-icon {
@@ -1578,6 +1588,12 @@ div.v-progressindicator-indeterminate-disabled {
white-space: nowrap;
overflow: hidden;
}
+.v-table-cell-wrapper-align-center {
+ text-align: center;
+}
+.v-table-cell-wrapper-align-right {
+ text-align: right;
+}
.v-table-column-selector {
float: right;
background: transparent url(../base/common/img/sprites.png) no-repeat 4px -37px;
@@ -3081,7 +3097,7 @@ select {
color: #336699;
font-weight: bold;
font-size: 11px;
- padding-right: 4px;
+ padding-left: 4px;
padding-top: 6px;
}
@@ -3094,13 +3110,14 @@ select {
margin-top: -2px;
}
-
-.v-table-header-cell-asc .v-table-caption-container {
+.v-table-header-cell-asc .v-table-sort-indicator {
background: transparent url(/html/themes/control_panel/images/arrows/05_up.png) no-repeat right 8px;
+ height: 26px;
}
-.v-table-header-cell-desc .v-table-caption-container {
+.v-table-header-cell-desc .v-table-sort-indicator {
background: transparent url(/html/themes/control_panel/images/arrows/05_down.png) no-repeat right 10px;
+ height: 26px;
}
.v-table-resizer {
diff --git a/WebContent/VAADIN/themes/liferay/table/table.css b/WebContent/VAADIN/themes/liferay/table/table.css
index 2e81edfde0..a271275eca 100644
--- a/WebContent/VAADIN/themes/liferay/table/table.css
+++ b/WebContent/VAADIN/themes/liferay/table/table.css
@@ -47,7 +47,7 @@
color: #336699;
font-weight: bold;
font-size: 11px;
- padding-right: 4px;
+ padding-left: 4px;
padding-top: 6px;
}
@@ -60,13 +60,14 @@
margin-top: -2px;
}
-
-.v-table-header-cell-asc .v-table-caption-container {
+.v-table-header-cell-asc .v-table-sort-indicator {
background: transparent url(/html/themes/control_panel/images/arrows/05_up.png) no-repeat right 8px;
+ height: 26px;
}
-.v-table-header-cell-desc .v-table-caption-container {
+.v-table-header-cell-desc .v-table-sort-indicator {
background: transparent url(/html/themes/control_panel/images/arrows/05_down.png) no-repeat right 10px;
+ height: 26px;
}
.v-table-resizer {
diff --git a/WebContent/VAADIN/themes/reindeer/button/img/black-button-sprites-ie6.png b/WebContent/VAADIN/themes/reindeer/button/img/black-button-sprites-ie6.png
index 515f64155d..90a73be23f 100644
--- a/WebContent/VAADIN/themes/reindeer/button/img/black-button-sprites-ie6.png
+++ b/WebContent/VAADIN/themes/reindeer/button/img/black-button-sprites-ie6.png
Binary files differ
diff --git a/WebContent/VAADIN/themes/reindeer/button/img/button-sprites-ie6.png b/WebContent/VAADIN/themes/reindeer/button/img/button-sprites-ie6.png
index 662dc4c661..8ccaa56edd 100644
--- a/WebContent/VAADIN/themes/reindeer/button/img/button-sprites-ie6.png
+++ b/WebContent/VAADIN/themes/reindeer/button/img/button-sprites-ie6.png
Binary files differ
diff --git a/WebContent/VAADIN/themes/reindeer/common/img/black-vertical-sprites-ie6.png b/WebContent/VAADIN/themes/reindeer/common/img/black-vertical-sprites-ie6.png
index 0a7bd350e5..84c52dbf4c 100644
--- a/WebContent/VAADIN/themes/reindeer/common/img/black-vertical-sprites-ie6.png
+++ b/WebContent/VAADIN/themes/reindeer/common/img/black-vertical-sprites-ie6.png
Binary files differ
diff --git a/WebContent/VAADIN/themes/reindeer/common/img/vertical-sprites-ie6.png b/WebContent/VAADIN/themes/reindeer/common/img/vertical-sprites-ie6.png
index 9972fe640f..bbededab94 100644
--- a/WebContent/VAADIN/themes/reindeer/common/img/vertical-sprites-ie6.png
+++ b/WebContent/VAADIN/themes/reindeer/common/img/vertical-sprites-ie6.png
Binary files differ
diff --git a/WebContent/VAADIN/themes/reindeer/common/img/vertical-sprites.png b/WebContent/VAADIN/themes/reindeer/common/img/vertical-sprites.png
index f1295471f0..791aa4f4cd 100644
--- a/WebContent/VAADIN/themes/reindeer/common/img/vertical-sprites.png
+++ b/WebContent/VAADIN/themes/reindeer/common/img/vertical-sprites.png
Binary files differ
diff --git a/WebContent/VAADIN/themes/reindeer/styles.css b/WebContent/VAADIN/themes/reindeer/styles.css
index 5ffb93b7f6..4ec042392f 100644
--- a/WebContent/VAADIN/themes/reindeer/styles.css
+++ b/WebContent/VAADIN/themes/reindeer/styles.css
@@ -1,5 +1,5 @@
-.v-theme-version:after {content:"9_9_9_INTERNAL-DEBUG-BUILD";}
-.v-theme-version-9_9_9_INTERNAL-DEBUG-BUILD {display: none;}
+.v-theme-version:after {content:"6_5_0_dev-20101124";}
+.v-theme-version-6_5_0_dev-20101124 {display: none;}
/* Automatically compiled css file from subdirectories. */
.v-absolutelayout-wrapper {
@@ -1523,22 +1523,32 @@ div.v-progressindicator-indeterminate-disabled {
overflow: hidden;
}
.v-table-caption-container {
- float: right;
overflow: hidden;
white-space: nowrap;
- padding-right: 6px;
+ margin-left: 6px;
}
-.v-table-header-cell-asc .v-table-caption-container {
+.v-table-sort-indicator {
+ width: 0px;
+ height: 1.2em;
+ float: right;
+}
+.v-table-header-cell-asc .v-table-sort-indicator,
+.v-table-header-cell-desc .v-table-sort-indicator {
+ width: 16px;
+ height: 1.2em;
+ float: right;
+}
+.v-table-header-cell-asc .v-table-sort-indicator {
background: transparent url(../base/common/img/sprites.png) no-repeat right 6px;
}
-.v-table-header-cell-desc .v-table-caption-container {
+.v-table-header-cell-desc .v-table-sort-indicator {
background: transparent url(../base/common/img/sprites.png) no-repeat right -10px;
}
-.v-table-header-cell-asc .v-table-caption-container-align-right {
- background: transparent url(../base/common/img/sprites.png) no-repeat -8px 6px;
+.v-table-caption-container-align-center {
+ text-align: center;
}
-.v-table-header-cell-desc .v-table-caption-container-align-right {
- background: transparent url(../base/common/img/sprites.png) no-repeat -8px -10px;
+.v-table-caption-container-align-right {
+ text-align: right;
}
.v-table-caption-container .v-icon,
.v-table-header-drag .v-icon {
@@ -1578,6 +1588,12 @@ div.v-progressindicator-indeterminate-disabled {
white-space: nowrap;
overflow: hidden;
}
+.v-table-cell-wrapper-align-center {
+ text-align: center;
+}
+.v-table-cell-wrapper-align-right {
+ text-align: right;
+}
.v-table-column-selector {
float: right;
background: transparent url(../base/common/img/sprites.png) no-repeat 4px -37px;
@@ -3603,7 +3619,7 @@ td.v-datefield-calendarpanel-nextyear {
background: transparent url(menubar/img/submenu-icon.png) no-repeat right 70%;
width: 26px;
height: 16px;
- text-indent: -999px;
+ text-indent: -9999px;
}
.v-menubar-submenu .v-menubar-menuitem-selected .v-menubar-submenu-indicator {
background-image: url(menubar/img/submenu-icon-hover.png);
@@ -4298,29 +4314,26 @@ td.v-datefield-calendarpanel-nextyear {
background: transparent;
border-right: 1px solid #c2c3c4;
}
-.v-table-header-cell-asc .v-table-caption-container {
+
+.v-table-sort-indicator {
+ background: transparent;
+ width: 0px;
+ height: 20px;
+}
+
+.v-table-header-cell-asc .v-table-sort-indicator {
background: transparent no-repeat right 7px;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
background-position: right -942px;
+ width: 16px;
}
-.v-table-header-cell-desc .v-table-caption-container {
+.v-table-header-cell-desc .v-table-sort-indicator {
background: transparent no-repeat right 7px;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
background-position: right -962px;
-}
-.v-table-header-cell-asc .v-table-caption-container-align-right {
- background: transparent no-repeat left 7px;
- background-image: url(common/img/vertical-sprites.png);
- -background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -982px;
-}
-.v-table-header-cell-desc .v-table-caption-container-align-right {
- background: transparent no-repeat left 7px;
- background-image: url(common/img/vertical-sprites.png);
- -background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1002px;
+ width: 16px;
}
.v-table-body,
.white .v-table-body {
@@ -4362,12 +4375,12 @@ td.v-datefield-calendarpanel-nextyear {
background: transparent no-repeat;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1022px;
+ background-position: left -982px;
}
.v-table-column-selector:active {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1042px;
+ background-position: left -1002px;
}
.v-table-focus-slot-left {
border-left-color: #222;
@@ -4382,7 +4395,7 @@ td.v-datefield-calendarpanel-nextyear {
background: transparent repeat-x;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1062px;
+ background-position: left -1022px;
padding: 4px;
text-transform: uppercase;
font-size: 10px;
@@ -4407,7 +4420,7 @@ td.v-datefield-calendarpanel-nextyear {
background: transparent repeat-x;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1082px;
+ background-position: left -1042px;
border: 1px solid #939494;
border: none;
border-radius-bottomleft: 4px;
@@ -4436,7 +4449,7 @@ td.v-datefield-calendarpanel-nextyear {
background: transparent no-repeat 0 4px;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1104px;
+ background-position: left -1064px;
padding-left: 12px;
padding-right: 4px;
}
@@ -4447,7 +4460,7 @@ td.v-datefield-calendarpanel-nextyear {
.v-contextmenu .gwt-MenuItem-selected .v-on {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1118px;
+ background-position: left -1078px;
}
@@ -4457,7 +4470,7 @@ td.v-datefield-calendarpanel-nextyear {
border-top-color: #2b3033;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1133px;
+ background-position: left -1093px;
color: #e7e9ea;
text-shadow: #000 0 -1px 0;
}
@@ -4467,40 +4480,30 @@ td.v-datefield-calendarpanel-nextyear {
.v-table-strong .v-table-resizer {
border-right-color: #1c1f21;
}
-.v-table-strong .v-table-header-cell-asc .v-table-caption-container {
+.v-table-strong .v-table-header-cell-asc .v-table-sort-indicator {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: right -1153px;
+ background-position: right -1113px;
}
-.v-table-strong .v-table-header-cell-desc .v-table-caption-container {
+.v-table-strong .v-table-header-cell-desc .v-table-sort-indicator {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: right -1172px;
-}
-.v-table-strong .v-table-header-cell-asc .v-table-caption-container-align-right {
- background-image: url(common/img/vertical-sprites.png);
- -background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1191px;
-}
-.v-table-strong .v-table-header-cell-desc .v-table-caption-container-align-right {
- background-image: url(common/img/vertical-sprites.png);
- -background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1210px;
+ background-position: right -1132px;
}
.v-table-strong .v-table-column-selector {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1229px;
+ background-position: left -1151px;
}
.v-table-strong .v-table-column-selector:active {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1249px;
+ background-position: left -1171px;
}
.v-table-strong .v-table-header-drag {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1269px;
+ background-position: left -1191px;
color: #e7e9ea;
text-shadow: #000 0 -1px 0;
}
@@ -4522,26 +4525,16 @@ td.v-datefield-calendarpanel-nextyear {
.black .v-table-resizer {
border-right-color: #252729;
}
-.black .v-table-header-cell-asc .v-table-caption-container {
+.black .v-table-header-cell-asc .v-table-sort-indicator {
background-image: url(common/img/black-vertical-sprites.png);
-background-image: url(common/img/black-vertical-sprites-ie6.png);
background-position: right -642px;
}
-.black .v-table-header-cell-desc .v-table-caption-container {
+.black .v-table-header-cell-desc .v-table-sort-indicator {
background-image: url(common/img/black-vertical-sprites.png);
-background-image: url(common/img/black-vertical-sprites-ie6.png);
background-position: right -661px;
}
-.black .v-table-header-cell-asc .v-table-caption-container-align-right {
- background-image: url(common/img/vertical-sprites.png);
- -background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1289px;
-}
-.black .v-table-header-cell-desc .v-table-caption-container-align-right {
- background-image: url(common/img/vertical-sprites.png);
- -background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1308px;
-}
.black .v-table-column-selector {
background-image: url(common/img/black-vertical-sprites.png);
-background-image: url(common/img/black-vertical-sprites-ie6.png);
@@ -4603,14 +4596,14 @@ td.v-datefield-calendarpanel-nextyear {
background: no-repeat;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1327px;
+ background-position: left -1211px;
padding-left: 3px;
}
.v-tabsheet-tabitemcell-first {
padding-left: 10px;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1359px;
+ background-position: left -1243px;
}
.v-tabsheet-tabitem,
.v-tabsheet-spacertd div {
@@ -4619,7 +4612,7 @@ td.v-datefield-calendarpanel-nextyear {
background: transparent repeat-x;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1391px;
+ background-position: left -1275px;
padding: 0;
color: #222;
text-shadow: #fff 0 1px 0;
@@ -4630,7 +4623,7 @@ td.v-datefield-calendarpanel-nextyear {
background: no-repeat right top;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: right -1423px;
+ background-position: right -1307px;
padding: 9px 8px 0 6px;
}
.v-tabsheet-tabitem .v-caption-closable {
@@ -4650,7 +4643,7 @@ td.v-datefield-calendarpanel-nextyear {
background: transparent;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1455px;
+ background-position: left -1339px;
cursor: default;
text-indent: -999px;
overflow: hidden;
@@ -4667,48 +4660,48 @@ td.v-datefield-calendarpanel-nextyear {
.v-tabsheet-caption-close:hover {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1473px;
+ background-position: left -1357px;
}
.v-tabsheet-caption-close:active {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1491px;
+ background-position: left -1375px;
}
.v-tabsheet-tabitem-selected .v-tabsheet-caption-close {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1509px;
+ background-position: left -1393px;
}
.v-tabsheet-tabitem-selected .v-tabsheet-caption-close:hover {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1527px;
+ background-position: left -1411px;
}
.v-tabsheet-tabitem-selected .v-tabsheet-caption-close:active {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1545px;
+ background-position: left -1429px;
}
.v-tabsheet-tabitemcell-selected {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1563px;
+ background-position: left -1447px;
}
.v-tabsheet-tabitemcell-selected-first {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1595px;
+ background-position: left -1479px;
}
.v-tabsheet-tabitem-selected {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1627px;
+ background-position: left -1511px;
color: #232930;
}
.v-tabsheet-tabitem-selected .v-caption {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: right -1659px;
+ background-position: right -1543px;
}
.v-tabsheet-spacertd div {
margin-right: 4px;
@@ -4717,7 +4710,7 @@ td.v-datefield-calendarpanel-nextyear {
background: transparent no-repeat right top;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: right -1691px;
+ background-position: right -1575px;
}
.blue .v-tabsheet-content {
border-color: #a8bcc5;
@@ -4815,7 +4808,7 @@ td.v-datefield-calendarpanel-nextyear {
background: transparent;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1723px;
+ background-position: left -1607px;
width: 18px;
height: 17px;
overflow: hidden;
@@ -4827,23 +4820,23 @@ td.v-datefield-calendarpanel-nextyear {
.v-tabsheet-scrollerNext {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1740px;
+ background-position: left -1624px;
}
.v-tabsheet-scrollerPrev:active {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1757px;
+ background-position: left -1641px;
}
.v-tabsheet-scrollerNext:active {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1774px;
+ background-position: left -1658px;
}
.v-tabsheet-scrollerPrev-disabled,
.v-tabsheet-scrollerPrev-disabled:active {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1791px;
+ background-position: left -1675px;
opacity: 1;
filter: none;
}
@@ -4851,7 +4844,7 @@ td.v-datefield-calendarpanel-nextyear {
.v-tabsheet-scrollerNext-disabled:active {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1808px;
+ background-position: left -1692px;
opacity: 1;
filter: none;
}
@@ -5037,20 +5030,20 @@ td.v-datefield-calendarpanel-nextyear {
.v-tabsheet-tabs-bar .v-tabsheet-tabitemcell {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1826px;
+ background-position: left -1710px;
}
.v-tabsheet-tabs-bar .v-tabsheet-tabitemcell-first {
padding-left: 6px;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1846px;
+ background-position: left -1730px;
}
.v-tabsheet-tabs-bar .v-tabsheet-tabitem,
.v-tabsheet-tabs-bar .v-tabsheet-spacertd div {
height: 20px;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1866px;
+ background-position: left -1750px;
font-size: 11px;
margin: 0;
}
@@ -5058,7 +5051,7 @@ td.v-datefield-calendarpanel-nextyear {
height: 18px;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: right -1886px;
+ background-position: right -1770px;
padding: 2px 12px 0 10px;
}
.v-tabsheet-tabs-bar .v-tabsheet-tabitem .v-caption-closable,
@@ -5110,23 +5103,23 @@ td.v-datefield-calendarpanel-nextyear {
.v-tabsheet-tabs-bar .v-tabsheet-tabitemcell-selected {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1906px;
+ background-position: left -1790px;
}
.v-tabsheet-tabs-bar .v-tabsheet-tabitemcell-selected-first {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1926px;
+ background-position: left -1810px;
}
.v-tabsheet-tabs-bar .v-tabsheet-tabitem-selected {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1946px;
+ background-position: left -1830px;
color: #232930;
}
.v-tabsheet-tabs-bar .v-tabsheet-tabitem-selected .v-caption {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: right -1966px;
+ background-position: right -1850px;
}
.v-tabsheet-tabcontainer-bar .v-tabsheet-scroller {
margin-top: -20px;
@@ -5134,7 +5127,7 @@ td.v-datefield-calendarpanel-nextyear {
border-right: none;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -1986px;
+ background-position: left -1870px;
}
.v-tabsheet-tabcontainer-bar .v-tabsheet-scroller button {
margin-top: 1px;
@@ -5188,7 +5181,7 @@ td.v-datefield-calendarpanel-nextyear {
background-repeat: repeat-x;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -2006px;
+ background-position: left -1890px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
@@ -5318,7 +5311,7 @@ textarea.v-textarea-readonly,
background: #4d749f repeat-x;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -2029px;
+ background-position: left -1913px;
color: #fff;
padding: 1px 2px;
-webkit-border-radius: 2px;
@@ -5393,7 +5386,7 @@ textarea.v-textarea-readonly,
background: transparent repeat-x;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -2049px;
+ background-position: left -1933px;
}
.v-window-header {
font-weight: bold;
@@ -5420,13 +5413,13 @@ textarea.v-textarea-readonly,
background: transparent;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -2086px;
+ background-position: left -1970px;
}
.v-window-footer {
background-repeat: repeat-x;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -2101px;
+ background-position: left -1985px;
height: 15px;
}
.v-window-closebox {
@@ -5437,17 +5430,17 @@ textarea.v-textarea-readonly,
background: transparent;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -2116px;
+ background-position: left -2000px;
}
.v-window-closebox:hover {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -2132px;
+ background-position: left -2016px;
}
.v-window-closebox:active {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -2148px;
+ background-position: left -2032px;
}
.v-window-contents {
background: #fff;
@@ -5480,7 +5473,7 @@ textarea.v-textarea-readonly,
height: 12px;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -2164px;
+ background-position: left -2048px;
}
.v-window-light .v-window-footer {
background: transparent;
@@ -5493,17 +5486,17 @@ textarea.v-textarea-readonly,
height: 15px;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -2176px;
+ background-position: left -2060px;
}
.v-window-light .v-window-closebox:hover {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -2191px;
+ background-position: left -2075px;
}
.v-window-light .v-window-closebox:active {
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -2206px;
+ background-position: left -2090px;
}
.v-window-light .v-window-contents {
background: transparent;
@@ -5513,7 +5506,7 @@ textarea.v-textarea-readonly,
background: #f7f7f8 repeat-x;
background-image: url(common/img/vertical-sprites.png);
-background-image: url(common/img/vertical-sprites-ie6.png);
- background-position: left -2221px;
+ background-position: left -2105px;
}
.v-ie6 .v-window-light .v-window-wrap2 {
background-image: none;
diff --git a/WebContent/VAADIN/themes/reindeer/table/table.css b/WebContent/VAADIN/themes/reindeer/table/table.css
index 49ec17b7ab..fa1359912f 100644
--- a/WebContent/VAADIN/themes/reindeer/table/table.css
+++ b/WebContent/VAADIN/themes/reindeer/table/table.css
@@ -68,21 +68,22 @@
background: transparent;
border-right: 1px solid #c2c3c4;
}
-.v-table-header-cell-asc .v-table-caption-container {
+
+.v-table-sort-indicator {
+ background: transparent;
+ width: 0px;
+ height: 20px;
+}
+
+.v-table-header-cell-asc .v-table-sort-indicator {
background: transparent no-repeat right 7px;
background-image: url(img/asc-light.png); /** sprite-ref: verticals; sprite-alignment: right; sprite-margin-top: 7px; sprite-margin-bottom: 6px; sprite-margin-right: 6px; */
+ width: 16px;
}
-.v-table-header-cell-desc .v-table-caption-container {
+.v-table-header-cell-desc .v-table-sort-indicator {
background: transparent no-repeat right 7px;
background-image: url(img/desc-light.png); /** sprite-ref: verticals; sprite-alignment: right; sprite-margin-top: 7px; sprite-margin-bottom: 6px; sprite-margin-right: 6px; */
-}
-.v-table-header-cell-asc .v-table-caption-container-align-right {
- background: transparent no-repeat left 7px;
- background-image: url(img/asc-light.png); /** sprite-ref: verticals; sprite-margin-top: 7px; sprite-margin-bottom: 6px; sprite-margin-left: 0px; */
-}
-.v-table-header-cell-desc .v-table-caption-container-align-right {
- background: transparent no-repeat left 7px;
- background-image: url(img/desc-light.png); /** sprite-ref: verticals; sprite-margin-top: 7px; sprite-margin-bottom: 6px; sprite-margin-left: 0px; */
+ width: 16px;
}
.v-table-body,
.white .v-table-body {
@@ -215,18 +216,12 @@
.v-table-strong .v-table-resizer {
border-right-color: #1c1f21;
}
-.v-table-strong .v-table-header-cell-asc .v-table-caption-container {
+.v-table-strong .v-table-header-cell-asc .v-table-sort-indicator {
background-image: url(img/asc.png); /** sprite-ref: verticals; sprite-alignment: right; sprite-margin-top: 7px; sprite-margin-bottom: 6px; sprite-margin-right: 6px; */
}
-.v-table-strong .v-table-header-cell-desc .v-table-caption-container {
+.v-table-strong .v-table-header-cell-desc .v-table-sort-indicator {
background-image: url(img/desc.png); /** sprite-ref: verticals; sprite-alignment: right; sprite-margin-top: 7px; sprite-margin-bottom: 6px; sprite-margin-right: 6px; */
}
-.v-table-strong .v-table-header-cell-asc .v-table-caption-container-align-right {
- background-image: url(img/asc.png); /** sprite-ref: verticals; sprite-margin-top: 7px; sprite-margin-bottom: 6px; sprite-margin-left: 0px; */
-}
-.v-table-strong .v-table-header-cell-desc .v-table-caption-container-align-right {
- background-image: url(img/desc.png); /** sprite-ref: verticals; sprite-margin-top: 7px; sprite-margin-bottom: 6px; sprite-margin-left: 0px; */
-}
.v-table-strong .v-table-column-selector {
background-image: url(img/col-sel.png); /** sprite-ref: verticals */
}
@@ -254,18 +249,12 @@
.black .v-table-resizer {
border-right-color: #252729;
}
-.black .v-table-header-cell-asc .v-table-caption-container {
+.black .v-table-header-cell-asc .v-table-sort-indicator {
background-image: url(img/asc.png); /** sprite-ref: black-verticals; sprite-alignment: right; sprite-margin-top: 7px; sprite-margin-bottom: 6px; sprite-margin-right: 6px; */
}
-.black .v-table-header-cell-desc .v-table-caption-container {
+.black .v-table-header-cell-desc .v-table-sort-indicator {
background-image: url(img/desc.png); /** sprite-ref: black-verticals; sprite-alignment: right; sprite-margin-top: 7px; sprite-margin-bottom: 6px; sprite-margin-right: 6px; */
}
-.black .v-table-header-cell-asc .v-table-caption-container-align-right {
- background-image: url(img/asc.png); /** sprite-ref: verticals; sprite-margin-top: 7px; sprite-margin-bottom: 6px; sprite-margin-left: 0px; */
-}
-.black .v-table-header-cell-desc .v-table-caption-container-align-right {
- background-image: url(img/desc.png); /** sprite-ref: verticals; sprite-margin-top: 7px; sprite-margin-bottom: 6px; sprite-margin-left: 0px; */
-}
.black .v-table-column-selector {
background-image: url(img/col-sel-black.png); /** sprite-ref: black-verticals */
}
diff --git a/WebContent/VAADIN/themes/runo/styles.css b/WebContent/VAADIN/themes/runo/styles.css
index 48990fca83..f9d3c5e5c6 100644
--- a/WebContent/VAADIN/themes/runo/styles.css
+++ b/WebContent/VAADIN/themes/runo/styles.css
@@ -1,5 +1,5 @@
-.v-theme-version:after {content:"9_9_9_INTERNAL-DEBUG-BUILD";}
-.v-theme-version-9_9_9_INTERNAL-DEBUG-BUILD {display: none;}
+.v-theme-version:after {content:"6_5_0_dev-20101124";}
+.v-theme-version-6_5_0_dev-20101124 {display: none;}
/* Automatically compiled css file from subdirectories. */
.v-absolutelayout-wrapper {
@@ -1523,22 +1523,32 @@ div.v-progressindicator-indeterminate-disabled {
overflow: hidden;
}
.v-table-caption-container {
- float: right;
overflow: hidden;
white-space: nowrap;
- padding-right: 6px;
+ margin-left: 6px;
+}
+.v-table-sort-indicator {
+ width: 0px;
+ height: 1.2em;
+ float: right;
}
-.v-table-header-cell-asc .v-table-caption-container {
+.v-table-header-cell-asc .v-table-sort-indicator,
+.v-table-header-cell-desc .v-table-sort-indicator {
+ width: 16px;
+ height: 1.2em;
+ float: right;
+}
+.v-table-header-cell-asc .v-table-sort-indicator {
background: transparent url(../base/common/img/sprites.png) no-repeat right 6px;
}
-.v-table-header-cell-desc .v-table-caption-container {
+.v-table-header-cell-desc .v-table-sort-indicator {
background: transparent url(../base/common/img/sprites.png) no-repeat right -10px;
}
-.v-table-header-cell-asc .v-table-caption-container-align-right {
- background: transparent url(../base/common/img/sprites.png) no-repeat -8px 6px;
+.v-table-caption-container-align-center {
+ text-align: center;
}
-.v-table-header-cell-desc .v-table-caption-container-align-right {
- background: transparent url(../base/common/img/sprites.png) no-repeat -8px -10px;
+.v-table-caption-container-align-right {
+ text-align: right;
}
.v-table-caption-container .v-icon,
.v-table-header-drag .v-icon {
@@ -1578,6 +1588,12 @@ div.v-progressindicator-indeterminate-disabled {
white-space: nowrap;
overflow: hidden;
}
+.v-table-cell-wrapper-align-center {
+ text-align: center;
+}
+.v-table-cell-wrapper-align-right {
+ text-align: right;
+}
.v-table-column-selector {
float: right;
background: transparent url(../base/common/img/sprites.png) no-repeat 4px -37px;
@@ -3685,18 +3701,21 @@ div.v-csslayout-box-shadow {
font-size: 15px;
padding: 9px 2px 9px 0;
text-shadow: #ffffff 0 1px 0;
+ margin-left: 0px;
+}
+.v-table-sort-indicator {
+ width: 0;
+ height: 36px;
}
-.v-table-header-cell-asc .v-table-caption-container {
+.v-table-header-cell-asc .v-table-sort-indicator {
background: transparent url(table/img/sort-asc.png) no-repeat right 50%;
+ width: 20px;
+ height: 36px;
}
-.v-table-header-cell-desc .v-table-caption-container {
+.v-table-header-cell-desc .v-table-sort-indicator {
background: transparent url(table/img/sort-desc.png) no-repeat right 50%;
-}
-.v-table-header-cell-asc .v-table-caption-container-align-right {
- background: transparent url(table/img/sort-asc.png) no-repeat left 50%;
-}
-.v-table-header-cell-desc .v-table-caption-container-align-right {
- background: transparent url(table/img/sort-desc.png) no-repeat left 50%;
+ width: 20px;
+ height: 36px;
}
.v-table-header-cell:hover,
.v-table-header-cell-asc:hover,
diff --git a/WebContent/VAADIN/themes/runo/table/table.css b/WebContent/VAADIN/themes/runo/table/table.css
index 5518c33e1c..e238586c6a 100644
--- a/WebContent/VAADIN/themes/runo/table/table.css
+++ b/WebContent/VAADIN/themes/runo/table/table.css
@@ -26,18 +26,21 @@
font-size: 15px;
padding: 9px 2px 9px 0;
text-shadow: #ffffff 0 1px 0;
+ margin-left: 0px;
}
-.v-table-header-cell-asc .v-table-caption-container {
+.v-table-sort-indicator {
+ width: 0;
+ height: 36px;
+}
+.v-table-header-cell-asc .v-table-sort-indicator {
background: transparent url(img/sort-asc.png) no-repeat right 50%;
+ width: 20px;
+ height: 36px;
}
-.v-table-header-cell-desc .v-table-caption-container {
+.v-table-header-cell-desc .v-table-sort-indicator {
background: transparent url(img/sort-desc.png) no-repeat right 50%;
-}
-.v-table-header-cell-asc .v-table-caption-container-align-right {
- background: transparent url(img/sort-asc.png) no-repeat left 50%;
-}
-.v-table-header-cell-desc .v-table-caption-container-align-right {
- background: transparent url(img/sort-desc.png) no-repeat left 50%;
+ width: 20px;
+ height: 36px;
}
.v-table-header-cell:hover,
.v-table-header-cell-asc:hover,
diff --git a/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java b/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java
index bc8b1eefc4..c74199b3a8 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java
@@ -195,7 +195,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
*/
private class SelectionRange {
private VScrollTableRow startRow;
- private int length;
+ private final int length;
/**
* Constuctor.
@@ -1136,8 +1136,15 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
}
private void setColWidth(int colIndex, int w, boolean isDefinedWidth) {
- // Set header column width
final HeaderCell hcell = tHead.getHeaderCell(colIndex);
+
+ // Make sure that the column grows to accommodate the sort indicator if
+ // necessary.
+ if (w < hcell.getMinWidth()) {
+ w = hcell.getMinWidth();
+ }
+
+ // Set header column width
hcell.setWidth(w, isDefinedWidth);
// Set body column width
@@ -1370,7 +1377,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
// fix "natural" width if width not set
if (width == null || "".equals(width)) {
int w = total;
- w += scrollBody.getCellExtraWidth() * visibleColOrder.length;
+ w += tHead.getTotalExtraWidth();
if (willHaveScrollbarz) {
w += Util.getNativeScrollbarSize();
}
@@ -1382,7 +1389,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
// Hey IE, are you really sure about this?
availW = scrollBody.getAvailableWidth();
}
- availW -= scrollBody.getCellExtraWidth() * visibleColOrder.length;
+ availW -= tHead.getTotalExtraWidth();
if (willHaveScrollbarz) {
availW -= Util.getNativeScrollbarSize();
@@ -1709,6 +1716,8 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
Element captionContainer = DOM.createDiv();
+ Element sortIndicator = DOM.createDiv();
+
Element colResizeWidget = DOM.createDiv();
Element floatingCopyOfHeaderCell;
@@ -1739,6 +1748,8 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
private float expandRatio = 0;
+ private boolean sorted;
+
public void setSortable(boolean b) {
sortable = b;
}
@@ -1758,6 +1769,10 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
DOM.appendChild(td, colResizeWidget);
+ DOM.setElementProperty(sortIndicator, "className", CLASSNAME
+ + "-sort-indicator");
+ DOM.appendChild(td, sortIndicator);
+
DOM.setElementProperty(captionContainer, "className", CLASSNAME
+ "-caption-container");
@@ -1781,9 +1796,6 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
// on column resize expand ratio becomes zero
expandRatio = 0;
}
- if (width == w) {
- return;
- }
if (width == -1) {
// go to default mode, clip content if necessary
DOM.setStyleAttribute(captionContainer, "overflow", "");
@@ -1793,8 +1805,15 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
DOM.setStyleAttribute(captionContainer, "width", "");
setWidth("");
} else {
-
- captionContainer.getStyle().setPropertyPx("width", w);
+ /*
+ * If this column is sorted, we need to make room for the sort
+ * indicator by subtracting the styled margin and resizer width
+ * from the width of the caption container.
+ */
+ int captionContainerWidth = w - sortIndicator.getOffsetWidth()
+ - colResizeWidget.getOffsetWidth();
+ captionContainer.getStyle().setPropertyPx("width",
+ captionContainerWidth);
/*
* if we already have tBody, set the header width properly, if
@@ -1802,13 +1821,12 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
* unless TD width is not explicitly set.
*/
if (scrollBody != null) {
- int tdWidth = width + scrollBody.getCellExtraWidth();
+ int tdWidth = width + getCellExtraWidth();
setWidth(tdWidth + "px");
} else {
Scheduler.get().scheduleDeferred(new Command() {
public void execute() {
- int tdWidth = width
- + scrollBody.getCellExtraWidth();
+ int tdWidth = width + getCellExtraWidth();
setWidth(tdWidth + "px");
}
});
@@ -1844,6 +1862,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
}
private void setSorted(boolean sorted) {
+ this.sorted = sorted;
if (sorted) {
if (sortAscending) {
this.setStyleName(CLASSNAME + "-header-cell-asc");
@@ -1970,7 +1989,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
client.updateVariable(paintableId, "sortascending",
!sortAscending, false);
} else {
- // set table scrolled by this column
+ // set table sorted by this column
client.updateVariable(paintableId, "sortcolumn",
cid, false);
}
@@ -2053,8 +2072,8 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
}
int newWidth = originalWidth + deltaX;
- if (newWidth < scrollBody.getCellExtraWidth()) {
- newWidth = scrollBody.getCellExtraWidth();
+ if (newWidth < getMinWidth()) {
+ newWidth = getMinWidth();
}
setColWidth(colIndex, newWidth, true);
}
@@ -2064,6 +2083,14 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
}
}
+ public int getMinWidth() {
+ int cellExtraWidth = getCellExtraWidth();
+ // cellExtraWidth might be -1 (undefined) if we don't yet have a
+ // scroll body.
+ return (cellExtraWidth < 0 ? 0 : cellExtraWidth)
+ + sortIndicator.getOffsetWidth();
+ }
+
public String getCaption() {
return DOM.getInnerText(captionContainer);
}
@@ -2080,17 +2107,12 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
captionContainer.removeClassName(ALIGN_PREFIX + "left");
switch (c) {
case ALIGN_CENTER:
- DOM.setStyleAttribute(captionContainer, "textAlign",
- "center");
captionContainer.addClassName(ALIGN_PREFIX + "center");
break;
case ALIGN_RIGHT:
- DOM.setStyleAttribute(captionContainer, "textAlign",
- "right");
captionContainer.addClassName(ALIGN_PREFIX + "right");
break;
default:
- DOM.setStyleAttribute(captionContainer, "textAlign", "");
captionContainer.addClassName(ALIGN_PREFIX + "left");
break;
}
@@ -2122,7 +2144,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
// cols)
final int hw = ((Element) getElement().getLastChild())
- .getOffsetWidth() + scrollBody.getCellExtraWidth();
+ .getOffsetWidth() + getCellExtraWidth();
if (columnIndex < 0) {
columnIndex = 0;
for (Iterator<Widget> it = tHead.iterator(); it
@@ -2147,6 +2169,58 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
return expandRatio;
}
+ public boolean isSorted() {
+ return sorted;
+ }
+
+ private int cellExtraWidth = -1;
+
+ /**
+ * Method to return the space used for cell paddings + border.
+ */
+ public int getCellExtraWidth() {
+ if (cellExtraWidth < 0 && scrollBody != null) {
+ detectExtraWidth();
+ }
+ return cellExtraWidth;
+ }
+
+ public void clearCellExtraWidth() {
+ cellExtraWidth = -1;
+ }
+
+ private void detectExtraWidth() {
+ NodeList<TableRowElement> rows = scrollBody.tBodyElement.getRows();
+ if (rows.getLength() == 0) {
+ /* need to temporary add empty row and detect */
+ VScrollTableRow scrollTableRow = scrollBody.new VScrollTableRow();
+ scrollBody.tBodyElement
+ .appendChild(scrollTableRow.getElement());
+ detectExtraWidth();
+ scrollBody.tBodyElement
+ .removeChild(scrollTableRow.getElement());
+ } else {
+ colIndex = getColIndexByKey(cid);
+ boolean noCells = false;
+ TableRowElement item = rows.getItem(0);
+ TableCellElement colTD = item.getCells().getItem(colIndex);
+ if (colTD == null) {
+ // content is currently empty, we need to add a fake cell
+ // for measuring
+ noCells = true;
+ VScrollTableRow next = (VScrollTableRow) iterator().next();
+ next.addCell(null, "", align, "", true, isSorted());
+ colTD = item.getCells().getItem(colIndex);
+ }
+ com.google.gwt.dom.client.Element wrapper = colTD
+ .getFirstChildElement();
+ cellExtraWidth = colTD.getOffsetWidth()
+ - wrapper.getOffsetWidth();
+ if (noCells) {
+ colTD.getParentElement().removeChild(colTD);
+ }
+ }
+ }
}
/**
@@ -2263,8 +2337,14 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
c.setAlign(col.getStringAttribute("align").charAt(0));
}
if (col.hasAttribute("width")) {
- final String width = col.getStringAttribute("width");
- c.setWidth(Integer.parseInt(width), true);
+ final String widthStr = col.getStringAttribute("width");
+ // Make sure to accomodate for the sort indicator if
+ // necessary.
+ int width = Integer.parseInt(widthStr);
+ if (width < c.getMinWidth()) {
+ width = c.getMinWidth();
+ }
+ c.setWidth(width, true);
} else if (recalcWidths) {
c.setUndefinedWidth();
}
@@ -2572,18 +2652,25 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
return aligns;
}
+ public int getTotalExtraWidth() {
+ int totalExtraWidth = 0;
+ for (Widget w : visibleCells) {
+ totalExtraWidth += ((HeaderCell) w).getCellExtraWidth();
+ }
+ return totalExtraWidth;
+ }
}
/**
* A cell in the footer
*/
public class FooterCell extends Widget {
- private Element td = DOM.createTD();
- private Element captionContainer = DOM.createDiv();
+ private final Element td = DOM.createTD();
+ private final Element captionContainer = DOM.createDiv();
private char align = ALIGN_LEFT;
private int width = -1;
private float expandRatio = 0;
- private String cid;
+ private final String cid;
boolean definedWidth = false;
private int naturalWidth = -1;
@@ -2704,7 +2791,8 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
* Reduce with one since footer does not have any spacers,
* instead a 1 pixel border.
*/
- int tdWidth = width + scrollBody.getCellExtraWidth()
+ int tdWidth = width
+ + tHead.getHeaderCell(cid).getCellExtraWidth()
- borderWidths;
setWidth(tdWidth + "px");
} else {
@@ -2712,8 +2800,8 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
public void execute() {
int borderWidths = 1;
int tdWidth = width
- + scrollBody.getCellExtraWidth()
- - borderWidths;
+ + tHead.getHeaderCell(cid)
+ .getCellExtraWidth() - borderWidths;
setWidth(tdWidth + "px");
}
});
@@ -2850,7 +2938,8 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
// cols)
final int hw = ((Element) getElement().getLastChild())
- .getOffsetWidth() + scrollBody.getCellExtraWidth();
+ .getOffsetWidth()
+ + tHead.getHeaderCell(cid).getCellExtraWidth();
if (columnIndex < 0) {
columnIndex = 0;
for (Iterator<Widget> it = tHead.iterator(); it
@@ -3525,48 +3614,6 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
}
}
- private int cellExtraWidth = -1;
-
- /**
- * Method to return the space used for cell paddings + border.
- */
- private int getCellExtraWidth() {
- if (cellExtraWidth < 0) {
- detectExtrawidth();
- }
- return cellExtraWidth;
- }
-
- private void detectExtrawidth() {
- NodeList<TableRowElement> rows = tBodyElement.getRows();
- if (rows.getLength() == 0) {
- /* need to temporary add empty row and detect */
- VScrollTableRow scrollTableRow = new VScrollTableRow();
- tBodyElement.appendChild(scrollTableRow.getElement());
- detectExtrawidth();
- tBodyElement.removeChild(scrollTableRow.getElement());
- } else {
- boolean noCells = false;
- TableRowElement item = rows.getItem(0);
- TableCellElement firstTD = item.getCells().getItem(0);
- if (firstTD == null) {
- // content is currently empty, we need to add a fake cell
- // for measuring
- noCells = true;
- VScrollTableRow next = (VScrollTableRow) iterator().next();
- next.addCell(null, "", ALIGN_LEFT, "", true);
- firstTD = item.getCells().getItem(0);
- }
- com.google.gwt.dom.client.Element wrapper = firstTD
- .getFirstChildElement();
- cellExtraWidth = firstTD.getOffsetWidth()
- - wrapper.getOffsetWidth();
- if (noCells) {
- firstTD.getParentElement().removeChild(firstTD);
- }
- }
- }
-
private void reLayoutComponents() {
for (Widget w : this) {
VScrollTableRow r = (VScrollTableRow) w;
@@ -3722,8 +3769,9 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
// row header
if (showRowHeaders) {
+ boolean sorted = tHead.getHeaderCell(col).isSorted();
addCell(uidl, buildCaptionHtmlSnippet(uidl), aligns[col++],
- "", true);
+ "", true, sorted);
visibleColumnIndex++;
}
@@ -3743,15 +3791,16 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
style = uidl.getStringAttribute("style-" + columnId);
}
+ boolean sorted = tHead.getHeaderCell(col).isSorted();
if (cell instanceof String) {
addCell(uidl, cell.toString(), aligns[col++], style,
- false);
+ false, sorted);
} else {
final Paintable cellContent = client
.getPaintable((UIDL) cell);
addCell(uidl, (Widget) cellContent, aligns[col++],
- style);
+ style, sorted);
paintComponent(cellContent, (UIDL) cell);
}
}
@@ -3766,11 +3815,11 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
public VScrollTableRow() {
this(0);
addStyleName(CLASSNAME + "-row");
- addCell(null, "_", 'b', "", true);
+ addCell(null, "_", 'b', "", true, false);
}
public void addCell(UIDL rowUidl, String text, char align,
- String style, boolean textIsHTML) {
+ String style, boolean textIsHTML, boolean sorted) {
// String only content is optimized by not using Label widget
final Element td = DOM.createTD();
final Element container = DOM.createDiv();
@@ -3778,6 +3827,9 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
if (style != null && !style.equals("")) {
className += " " + CLASSNAME + "-cell-content-" + style;
}
+ if (sorted) {
+ className += " " + CLASSNAME + "-cell-content-sorted";
+ }
td.setClassName(className);
container.setClassName(CLASSNAME + "-cell-wrapper");
if (textIsHTML) {
@@ -3800,13 +3852,17 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
getElement().appendChild(td);
}
- public void addCell(UIDL rowUidl, Widget w, char align, String style) {
+ public void addCell(UIDL rowUidl, Widget w, char align,
+ String style, boolean sorted) {
final Element td = DOM.createTD();
final Element container = DOM.createDiv();
String className = CLASSNAME + "-cell-content";
if (style != null && !style.equals("")) {
className += " " + CLASSNAME + "-cell-content-" + style;
}
+ if (sorted) {
+ className += " " + CLASSNAME + "-cell-content-sorted";
+ }
td.setClassName(className);
container.setClassName(CLASSNAME + "-cell-wrapper");
// TODO most components work with this, but not all (e.g.
@@ -4301,7 +4357,8 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
// but a best guess (expecting similar content in all
// columns ->
// if one component is relative width so are others)
- w = headerCell.getOffsetWidth() - getCellExtraWidth();
+ w = headerCell.getOffsetWidth()
+ - headerCell.getCellExtraWidth();
}
}
return new RenderSpace(w, 0) {
@@ -4508,8 +4565,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
int availW = scrollBody.getAvailableWidth();
// Hey IE, are you really sure about this?
availW = scrollBody.getAvailableWidth();
- int visibleCellCount = tHead.getVisibleCellCount();
- availW -= scrollBody.getCellExtraWidth() * visibleCellCount;
+ availW -= tHead.getTotalExtraWidth();
if (willHaveScrollbars()) {
availW -= Util.getNativeScrollbarSize();
}
@@ -4553,8 +4609,8 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
// fix body height (may vary if lazy loading is offhorizontal
// scrollbar appears/disappears)
int bodyHeight = scrollBody.getRequiredHeight();
- boolean needsSpaceForHorizontalSrollbar = (availW < usedMinimumWidth);
- if (needsSpaceForHorizontalSrollbar) {
+ boolean needsSpaceForHorizontalScrollbar = (availW < usedMinimumWidth);
+ if (needsSpaceForHorizontalScrollbar) {
bodyHeight += Util.getNativeScrollbarSize();
}
int heightBefore = getOffsetHeight();
diff --git a/src/com/vaadin/ui/Table.java b/src/com/vaadin/ui/Table.java
index 56662112e3..3932d25874 100644
--- a/src/com/vaadin/ui/Table.java
+++ b/src/com/vaadin/ui/Table.java
@@ -390,6 +390,8 @@ public class Table extends AbstractSelect implements Action.Container,
private MultiSelectMode multiSelectMode = MultiSelectMode.DEFAULT;
+ private boolean recalculateAllColumnWidths = false;
+
/* Table constructors */
/**
@@ -2052,6 +2054,7 @@ public class Table extends AbstractSelect implements Action.Container,
}
}
if (doSort) {
+ recalculateAllColumnWidths = true;
this.sort();
resetPageBuffer();
}
@@ -2285,6 +2288,10 @@ public class Table extends AbstractSelect implements Action.Container,
target.addAttribute("recalcWidths", true);
}
}
+ if (recalculateAllColumnWidths) {
+ target.addAttribute("recalcWidths", true);
+ recalculateAllColumnWidths = false;
+ }
if (!isNullSelectionAllowed() && getNullSelectionItemId() != null
&& containsId(getNullSelectionItemId())) {
diff --git a/tests/src/com/vaadin/tests/components/table/ColumnHeaderAlignments.java b/tests/src/com/vaadin/tests/components/table/ColumnHeaderAlignments.java
index 6516b96a94..0c625f1c5d 100644
--- a/tests/src/com/vaadin/tests/components/table/ColumnHeaderAlignments.java
+++ b/tests/src/com/vaadin/tests/components/table/ColumnHeaderAlignments.java
@@ -1,8 +1,12 @@
package com.vaadin.tests.components.table;
+import com.vaadin.data.Item;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CheckBox;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Select;
import com.vaadin.ui.Table;
@@ -10,12 +14,20 @@ import com.vaadin.ui.Table;
@SuppressWarnings("serial")
public class ColumnHeaderAlignments extends TestBase {
+ private static final String BAZ = "Baz (right)";
+ private static final String BAR = "Bar (center)";
+ private static final String FOO = "Foo (left)";
+ private Table fooTable;
+ private Table barTable;
+ private Table bazTable;
+
@Override
protected void setup() {
Select theme = new Select();
theme.addItem("reindeer");
theme.addItem("runo");
theme.addItem("base");
+ theme.addItem("liferay");
theme.setValue("reindeer");
theme.setNullSelectionAllowed(false);
theme.setImmediate(true);
@@ -25,25 +37,48 @@ public class ColumnHeaderAlignments extends TestBase {
}
});
addComponent(theme);
+ CheckBox footers = new CheckBox("Show footers", new ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ fooTable.setFooterVisible((Boolean) event.getButton()
+ .getValue());
+ barTable.setFooterVisible((Boolean) event.getButton()
+ .getValue());
+ bazTable.setFooterVisible((Boolean) event.getButton()
+ .getValue());
+ }
+ });
+ footers.setImmediate(true);
+ addComponent(footers);
HorizontalLayout tables = new HorizontalLayout();
- tables.addComponent(createTable(null));
- tables.addComponent(createTable("strong"));
- tables.addComponent(createTable("black"));
+ fooTable = createTable(null);
+ tables.addComponent(fooTable);
+ barTable = createTable("strong");
+ tables.addComponent(barTable);
+ bazTable = createTable("black");
+ tables.addComponent(bazTable);
addComponent(tables);
}
private Table createTable(String style) {
Table table = new Table();
- table.addContainerProperty("Foo (left)", String.class, "");
- table.addContainerProperty("Bar (center)", String.class, "");
- table.addContainerProperty("Baz (right)", String.class, "");
+ table.addContainerProperty(FOO, String.class, "");
+ table.addContainerProperty(BAR, String.class, "");
+ table.addContainerProperty(BAZ, String.class, "");
- table.setColumnAlignment("Foo (left)", Table.ALIGN_LEFT);
- table.setColumnAlignment("Bar (center)", Table.ALIGN_CENTER);
- table.setColumnAlignment("Baz (right)", Table.ALIGN_RIGHT);
+ table.setColumnAlignment(FOO, Table.ALIGN_LEFT);
+ table.setColumnAlignment(BAR, Table.ALIGN_CENTER);
+ table.setColumnAlignment(BAZ, Table.ALIGN_RIGHT);
if (style != null) {
table.setStyleName(style);
}
+
+ for (int i = 0; i < 100; i++) {
+ Item item = table.addItem(i);
+ item.getItemProperty(FOO).setValue("foo");
+ item.getItemProperty(BAR).setValue("bar");
+ item.getItemProperty(BAZ).setValue("baz");
+ }
+
return table;
}