From 42a83baa7af1d2d5b9c739d1e6ce81e5608bdf9e Mon Sep 17 00:00:00 2001 From: Jouni Koivuviita Date: Thu, 12 Nov 2009 08:44:03 +0000 Subject: [PATCH] Fixes #1595: Close button on TabSheet control * Added new sample to Sampler/TabSheets * Made all tabs in Reindeer theme demo closable. svn changeset:9737/svn branch:6.2 --- WebContent/VAADIN/themes/base/styles.css | 27 +- .../VAADIN/themes/base/tabsheet/tabsheet.css | 30 ++ .../common/img/vertical-sprites-ie6.png | Bin 7120 -> 8090 bytes .../reindeer/common/img/vertical-sprites.png | Bin 19805 -> 22844 bytes WebContent/VAADIN/themes/reindeer/styles.css | 364 +++++++++++++----- .../reindeer/tabsheet/img/close-btn-hover.png | Bin 0 -> 495 bytes .../tabsheet/img/close-btn-pressed.png | Bin 0 -> 520 bytes .../tabsheet/img/close-btn-sel-hover.png | Bin 0 -> 909 bytes .../tabsheet/img/close-btn-sel-pressed.png | Bin 0 -> 952 bytes .../reindeer/tabsheet/img/close-btn-sel.png | Bin 0 -> 636 bytes .../reindeer/tabsheet/img/close-btn.png | Bin 0 -> 339 bytes .../reindeer/tabsheet/tabsheet-bar-style.css | 108 ++++++ .../tabsheet/tabsheet-minimal-style.css | 135 +++++++ .../tabsheet/tabsheet-normal-style.css | 160 ++++++++ .../reindeer/tabsheet/tabsheet-scroller.css | 52 +++ .../themes/reindeer/tabsheet/tabsheet.css | 330 +--------------- WebContent/VAADIN/themes/runo/styles.css | 44 ++- .../VAADIN/themes/runo/tabsheet/tabsheet.css | 17 + .../sampler/home/btn-shadow-bottom.png | Bin 0 -> 280 bytes .../sampler/sampler/home/btn-shadow-top.png | Bin 0 -> 287 bytes .../sampler/sampler/home/label-grad.png | Bin 0 -> 175 bytes .../terminal/gwt/client/ui/VTabsheet.java | 58 ++- src/com/vaadin/ui/TabSheet.java | 108 +++++- 23 files changed, 988 insertions(+), 445 deletions(-) create mode 100644 WebContent/VAADIN/themes/reindeer/tabsheet/img/close-btn-hover.png create mode 100644 WebContent/VAADIN/themes/reindeer/tabsheet/img/close-btn-pressed.png create mode 100644 WebContent/VAADIN/themes/reindeer/tabsheet/img/close-btn-sel-hover.png create mode 100644 WebContent/VAADIN/themes/reindeer/tabsheet/img/close-btn-sel-pressed.png create mode 100644 WebContent/VAADIN/themes/reindeer/tabsheet/img/close-btn-sel.png create mode 100644 WebContent/VAADIN/themes/reindeer/tabsheet/img/close-btn.png create mode 100644 WebContent/VAADIN/themes/reindeer/tabsheet/tabsheet-bar-style.css create mode 100644 WebContent/VAADIN/themes/reindeer/tabsheet/tabsheet-minimal-style.css create mode 100644 WebContent/VAADIN/themes/reindeer/tabsheet/tabsheet-normal-style.css create mode 100644 WebContent/VAADIN/themes/reindeer/tabsheet/tabsheet-scroller.css create mode 100644 WebContent/VAADIN/themes/sampler/sampler/home/btn-shadow-bottom.png create mode 100644 WebContent/VAADIN/themes/sampler/sampler/home/btn-shadow-top.png create mode 100644 WebContent/VAADIN/themes/sampler/sampler/home/label-grad.png diff --git a/WebContent/VAADIN/themes/base/styles.css b/WebContent/VAADIN/themes/base/styles.css index 5908dcec9f..e0908ddd88 100644 --- a/WebContent/VAADIN/themes/base/styles.css +++ b/WebContent/VAADIN/themes/base/styles.css @@ -1387,6 +1387,9 @@ div.v-progressindicator-indeterminate-disabled { .v-ff2 .v-tabsheet-scroller { position: relative; } +.v-disabled .v-tabsheet-scroller { + display: none; +} .v-tabsheet-scrollerPrev, .v-tabsheet-scrollerNext, .v-tabsheet-scrollerPrev-disabled, @@ -1412,12 +1415,26 @@ div.v-progressindicator-indeterminate-disabled { zoom: 1; width: 16px; height: 16px; - background: url(common/img/close.png) no-repeat; + text-align: center; + font-weight: bold; cursor: pointer; vertical-align: middle; + user-select: none; + -khtml-user-select: none; + -ms-user-select: none; + -moz-user-select: none; + -webkit-user-select: none; } -.v-disabled .v-tabsheet-caption-close { +.v-tabsheet .v-disabled .v-tabsheet-caption-close { cursor: default; + visibility: hidden; +} +.v-tabsheet-tabitemcell:hover .v-tabsheet-caption-close, +.v-ie6 .v-tabsheet-caption-close { + visibility: visible; +} +.v-ie6 .v-tabsheet-caption-close { + float: right; } .v-tabsheet-tabitem { border: 1px solid #aaa; @@ -1642,9 +1659,9 @@ div.v-tree-node-leaf { position: absolute; top: 0; right: 0; - width: 16px; - height: 16px; - background: url(common/img/close.png) no-repeat; + width: 1em; + height: 1em; + background: red; cursor: pointer; overflow: hidden; } diff --git a/WebContent/VAADIN/themes/base/tabsheet/tabsheet.css b/WebContent/VAADIN/themes/base/tabsheet/tabsheet.css index 8520f35913..6fd1f1470a 100644 --- a/WebContent/VAADIN/themes/base/tabsheet/tabsheet.css +++ b/WebContent/VAADIN/themes/base/tabsheet/tabsheet.css @@ -39,6 +39,9 @@ .v-ff2 .v-tabsheet-scroller { position: relative; } +.v-disabled .v-tabsheet-scroller { + display: none; +} .v-tabsheet-scrollerPrev, .v-tabsheet-scrollerNext, .v-tabsheet-scrollerPrev-disabled, @@ -58,6 +61,33 @@ .v-tabsheet-tabs .v-caption span { white-space: nowrap; } +.v-tabsheet-caption-close { + display: inline; + display: inline-block; + zoom: 1; + width: 16px; + height: 16px; + text-align: center; + font-weight: bold; + cursor: pointer; + vertical-align: middle; + user-select: none; + -khtml-user-select: none; + -ms-user-select: none; + -moz-user-select: none; + -webkit-user-select: none; +} +.v-tabsheet .v-disabled .v-tabsheet-caption-close { + cursor: default; + visibility: hidden; +} +.v-tabsheet-tabitemcell:hover .v-tabsheet-caption-close, +.v-ie6 .v-tabsheet-caption-close { + visibility: visible; +} +.v-ie6 .v-tabsheet-caption-close { + float: right; +} .v-tabsheet-tabitem { border: 1px solid #aaa; border-right: none; 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 c4ee4bdcd1be4c808a3e69466a48f074300ec625..c11ee47f9ee300f3ca91f64d8d66a88368d62231 100644 GIT binary patch delta 7962 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 XP8KN+Ba8lhMq{WdYAIC7S%m%{^QNEy delta 6984 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 diff --git a/WebContent/VAADIN/themes/reindeer/common/img/vertical-sprites.png b/WebContent/VAADIN/themes/reindeer/common/img/vertical-sprites.png index b68e51aca491cf1c1b75a58e050e29f6bfbe17b4..4a4537ac064ccec5f162a5f9253991708184ad99 100644 GIT binary patch literal 22844 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 div, -.v-ie6 .v-panel-content { +.v-panel-content > div { background: #fff; min-height: 100%; } +.v-ie6 .v-panel-content { + background: #fff; +} .v-panel-deco { height: 1px; border-top: 1px solid #bebebe; @@ -3196,6 +3217,9 @@ td.v-datefield-calendarpanel-nextyear { .v-panel-content-light > div { background: transparent; } +.v-ie6 .v-panel-content-light { + background: transparent; +} .v-panel-deco-light { height: 0; border: none; @@ -3967,6 +3991,10 @@ td.v-datefield-calendarpanel-nextyear { border: none; } +/* These styles get catenated together on build */ + +/* Default Tabsheet styles */ + .v-tabsheet-tabitemcell, .v-tabsheet-spacertd { height: 32px; @@ -4005,33 +4033,80 @@ td.v-datefield-calendarpanel-nextyear { background-position: right -1304px; padding: 9px 8px 0 6px; } +.v-tabsheet-tabitem .v-caption-closable { + padding-right: 0; + padding-left: 17px; +} .v-tabsheet-tabitem .v-captiontext { height: 16px; line-height: 16px; } .v-tabsheet-caption-close { - + float: right; + width: 19px; + height: 18px; + margin: -1px -1px 0; + padding-left: 2px; + background: transparent; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1336px; + cursor: default; + text-indent: -999px; + overflow: hidden; +} +.v-ff .v-tabsheet-caption-close, +.v-ie7 .v-tabsheet-caption-close { + margin-top: -17px; +} +.v-ie6 .v-tabsheet-caption-close { + float: none; +} +.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 -1354px; +} +.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 -1372px; +} +.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 -1390px; +} +.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 -1408px; +} +.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 -1426px; } .v-tabsheet-tabitemcell-selected { background-image: url(common/img/vertical-sprites.png); -background-image: url(common/img/vertical-sprites-ie6.png); - background-position: left -1336px; + background-position: left -1444px; } .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 -1368px; + background-position: left -1476px; } .v-tabsheet-tabitem-selected { background-image: url(common/img/vertical-sprites.png); -background-image: url(common/img/vertical-sprites-ie6.png); - background-position: left -1400px; + background-position: left -1508px; 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 -1432px; + background-position: right -1540px; } .v-tabsheet-spacertd div { margin-right: 4px; @@ -4040,7 +4115,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 -1464px; + background-position: right -1572px; } .v-tabsheet-content { border: 1px solid #dcdcdc; @@ -4074,13 +4149,53 @@ td.v-datefield-calendarpanel-nextyear { border-top-color: rgba(0,0,0,.1); background: rgba(0,0,0,.08); } + + +/* Icons & error indicators */ + +.v-tabsheet-tabs .v-icon, +.v-tabsheet-tabs .v-captiontext, +.v-tabsheet-tabs .v-errorindicator { + display: inline; + float: none; +} +.v-sa .v-tabsheet-tabs .v-captiontext { + display: inline-block; +} +.v-tabsheet-tabs .v-icon { + width: 16px !important; + height: 16px !important; +} +.v-tabsheet-tabs .v-errorindicator { + display: inline-block; + width: 13px; + height: 16px; + background: transparent url(common/icons/error.png) no-repeat 50%; +} +.v-ff2 .v-tabsheet-tabs .v-icon, +.v-ff2 .v-tabsheet-tabs .v-errorindicator { + display: -moz-inline-stack; +} +.v-ie6 .v-tabsheet-tabs .v-errorindicator { + background-image: url(common/icons/error-ie6.png); +} +.v-ie .v-tabsheet-tabs .v-errorindicator { + zoom: 1; + display: inline; +} + +/* Tabsheet scroller styles */ + .v-tabsheet-scroller { height: 31px; margin-top: -31px; - padding-right: 3px; - border-right: 1px solid #afafaf; + padding: 0 3px 0 4px; + border-right: 1px solid #c2c2c2; + border-left: 1px solid #cfcfcf; position: relative; float: right; + background: transparent url(tabsheet/img/framed/tab-bg.png) repeat-x left -1px; + width: 36px; } .v-tabsheet-scroller button { margin-top: 7px; @@ -4093,7 +4208,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 -1496px; + background-position: left -1604px; width: 18px; height: 17px; overflow: hidden; @@ -4105,23 +4220,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 -1513px; + background-position: left -1621px; } .v-tabsheet-scrollerPrev:active { background-image: url(common/img/vertical-sprites.png); -background-image: url(common/img/vertical-sprites-ie6.png); - background-position: left -1530px; + background-position: left -1638px; } .v-tabsheet-scrollerNext:active { background-image: url(common/img/vertical-sprites.png); -background-image: url(common/img/vertical-sprites-ie6.png); - background-position: left -1547px; + background-position: left -1655px; } .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 -1564px; + background-position: left -1672px; opacity: 1; filter: none; } @@ -4129,48 +4244,13 @@ 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 -1581px; + background-position: left -1689px; opacity: 1; filter: none; } -.v-tabsheet-tabs .v-icon, -.v-tabsheet-tabs .v-captiontext, -.v-tabsheet-tabs .v-errorindicator { - display: inline; - float: none; -} -.v-sa .v-tabsheet-tabs .v-captiontext { - display: inline-block; -} -.v-tabsheet-tabs .v-icon { - width: 16px !important; - height: 16px !important; -} -.v-tabsheet-tabs .v-errorindicator { - display: inline-block; - width: 13px; - height: 16px; - background: transparent url(common/icons/error.png) no-repeat 50%; -} -.v-ff2 .v-tabsheet-tabs .v-icon, -.v-ff2 .v-tabsheet-tabs .v-errorindicator { - display: -moz-inline-stack; -} -.v-ie6 .v-tabsheet-tabs .v-errorindicator { - background-image: url(common/icons/error-ie6.png); -} -.v-ie .v-tabsheet-tabs .v-errorindicator { - zoom: 1; - display: inline; -} - - - - - /** - * Minimal style -------------- + * Tabsheet "minimal" style -------------- */ .v-tabsheet-minimal .v-tabsheet-spacertd div { border-bottom: 1px solid #bfbfbf; @@ -4210,6 +4290,10 @@ td.v-datefield-calendarpanel-nextyear { background: transparent; padding: 4px 15px 6px 15px; } +.v-tabsheet-minimal .v-tabsheet-tabitem .v-caption-closable, +.v-tabsheet-minimal .v-tabsheet-tabitem-selected .v-caption-closable { + padding-right: 6px; +} .v-tabsheet-content-minimal { border: none; } @@ -4223,20 +4307,58 @@ td.v-datefield-calendarpanel-nextyear { .v-tabsheet-minimal .v-tabsheet-scroller { margin-top: -20px; height: 17px; - padding-right: 0; - border-right: none; - position: static; - float: none; + padding: 0; + border: none; + background: transparent; } .v-tabsheet-minimal .v-tabsheet-scroller button { margin-top: 0; } +.v-tabsheet-minimal .v-tabsheet-caption-close, +.v-tabsheet-minimal .v-tabsheet-caption-close:hover, +.v-tabsheet-minimal .v-tabsheet-caption-close:active { + text-indent: 0; + background: transparent; + margin-left: 3px; + margin-right: -3px; + padding: 0; + color: #999; + width: 15px; + height: 15px; + line-height: 14px; + -webkit-border-radius: 7px; + -moz-border-radius: 7px; +} +.v-tabsheet-minimal .v-tabsheet-caption-close { + margin-top: 1px; +} +.v-ff .v-tabsheet-minimal .v-tabsheet-caption-close, +.v-ie7 .v-tabsheet-minimal .v-tabsheet-caption-close { + margin-top: -15px; +} +.v-tabsheet-minimal .v-tabsheet-caption-close:hover { + color: #fff; + background: #aaa; +} +.v-tabsheet-minimal .v-tabsheet-caption-close:active { + background: #777; +} /* Minimal tabsheet on blue background */ .blue .v-tabsheet-minimal .v-tabsheet-spacertd div, .blue .v-tabsheet-minimal .v-tabsheet-tabitem, .blue .v-tabsheet-minimal .v-tabsheet-tabitem-selected { border-color: #7c8a91; } +.blue .v-tabsheet-minimal .v-tabsheet-caption-close { + color: #7c8a91; +} +.blue .v-tabsheet-minimal .v-tabsheet-caption-close:hover { + color: #BCD3DE; + background: #778d98; +} +.blue .v-tabsheet-minimal .v-tabsheet-caption-close:active { + background: #4f6874; +} /* Minimal tabsheet on black background */ .black .v-tabsheet-minimal .v-tabsheet-spacertd div, .black .v-tabsheet-minimal .v-tabsheet-tabitem, @@ -4252,14 +4374,19 @@ td.v-datefield-calendarpanel-nextyear { color: #c9ccce; text-shadow: #000 0 0 1px; } - - - - - +.black .v-tabsheet-minimal .v-tabsheet-caption-close { + color: #72787c; +} +.black .v-tabsheet-minimal .v-tabsheet-caption-close:hover { + color: #1d2021; + background: #4d5154; +} +.black .v-tabsheet-minimal .v-tabsheet-caption-close:active { + background: #626669; +} /** - * Bar style --------------- + * Tabsheet bar style --------------- */ .v-tabsheet-bar .v-tabsheet-tabitemcell, .v-tabsheet-bar .v-tabsheet-spacertd { @@ -4271,20 +4398,20 @@ td.v-datefield-calendarpanel-nextyear { .v-tabsheet-bar .v-tabsheet-tabitemcell { background-image: url(common/img/vertical-sprites.png); -background-image: url(common/img/vertical-sprites-ie6.png); - background-position: left -1599px; + background-position: left -1707px; } .v-tabsheet-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 -1619px; + background-position: left -1727px; } .v-tabsheet-bar .v-tabsheet-tabitem, .v-tabsheet-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 -1639px; + background-position: left -1747px; font-size: 11px; margin: 0; } @@ -4292,43 +4419,86 @@ 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 -1659px; + background-position: right -1767px; padding: 2px 12px 0 10px; } +.v-tabsheet-bar .v-tabsheet-tabitem .v-caption-closable, +.v-tabsheet-bar .v-tabsheet-tabitem-selected .v-caption-closable { + padding-right: 8px; + padding-left: 14px; +} +.v-tabsheet-bar .v-tabsheet-caption-close, +.v-tabsheet-bar .v-tabsheet-caption-close:hover, +.v-tabsheet-bar .v-tabsheet-caption-close:active { + text-indent: 0; + background: transparent; + margin-left: 3px; + margin-right: -3px; + padding: 0; + color: #3c3c3c; + width: 14px; + height: 14px; + line-height: 12px; + -webkit-border-radius: 7px; + -moz-border-radius: 7px; +} +.v-tabsheet-bar .v-tabsheet-caption-close { + margin-top: 0; +} +.v-ff .v-tabsheet-bar .v-tabsheet-caption-close, +.v-ie7 .v-tabsheet-bar .v-tabsheet-caption-close { + margin-top: -15px; +} +.v-tabsheet-bar .v-tabsheet-caption-close:hover { + background: #bfbfbf; + -webkit-box-shadow: 0 1px 0 #fff; +} +.v-tabsheet-bar .v-tabsheet-caption-close:active { + background: #a9a9a9; +} +.v-tabsheet-bar .v-tabsheet-tabitem-selected .v-tabsheet-caption-close { + color: #404142; +} +.v-tabsheet-bar .v-tabsheet-tabitem-selected .v-tabsheet-caption-close:hover { + background: #5e666e; + color: #fff; + text-shadow: 0 -1px 0 #222; +} +.v-tabsheet-bar .v-tabsheet-tabitem-selected .v-tabsheet-caption-close:active { + background: #404142; +} + .v-tabsheet-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 -1679px; + background-position: left -1787px; } .v-tabsheet-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 -1699px; + background-position: left -1807px; } .v-tabsheet-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 -1719px; + background-position: left -1827px; color: #232930; } .v-tabsheet-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 -1739px; + background-position: right -1847px; } .v-tabsheet-bar .v-tabsheet-scroller { - margin-top: -19px; -} -.v-tabsheet-bar .v-tabsheet-scroller { - margin-top: -19px; - height: 17px; - padding-right: 0; + margin-top: -20px; + height: 19px; border-right: none; - position: static; - float: none; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1867px; } .v-tabsheet-bar .v-tabsheet-scroller button { - margin-top: 0; + margin-top: 1px; } .v-tabsheet-content-bar { border: none; @@ -4353,7 +4523,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 -1759px; + background-position: left -1887px; border-radius: 3px; -moz-border-radius: 3px; margin: 0; @@ -4512,7 +4682,7 @@ input.v-textfield-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 -1782px; + background-position: left -1910px; color: #fff; padding: 1px 2px; -webkit-border-radius: 2px; @@ -4567,7 +4737,7 @@ input.v-textfield-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 -1802px; + background-position: left -1930px; } .v-window-header { font-weight: bold; @@ -4594,13 +4764,13 @@ input.v-textfield-readonly, background: transparent; background-image: url(common/img/vertical-sprites.png); -background-image: url(common/img/vertical-sprites-ie6.png); - background-position: left -1839px; + background-position: left -1967px; } .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 -1854px; + background-position: left -1982px; height: 15px; } .v-window-closebox { @@ -4611,17 +4781,17 @@ input.v-textfield-readonly, background: transparent; background-image: url(common/img/vertical-sprites.png); -background-image: url(common/img/vertical-sprites-ie6.png); - background-position: left -1869px; + background-position: left -1997px; } .v-window-closebox:hover { background-image: url(common/img/vertical-sprites.png); -background-image: url(common/img/vertical-sprites-ie6.png); - background-position: left -1885px; + background-position: left -2013px; } .v-window-closebox:active { background-image: url(common/img/vertical-sprites.png); -background-image: url(common/img/vertical-sprites-ie6.png); - background-position: left -1901px; + background-position: left -2029px; } .v-window-contents { background: #fff; @@ -4654,7 +4824,7 @@ input.v-textfield-readonly, height: 12px; background-image: url(common/img/vertical-sprites.png); -background-image: url(common/img/vertical-sprites-ie6.png); - background-position: left -1917px; + background-position: left -2045px; } .v-window-light .v-window-footer { background: transparent; @@ -4667,17 +4837,17 @@ input.v-textfield-readonly, height: 15px; background-image: url(common/img/vertical-sprites.png); -background-image: url(common/img/vertical-sprites-ie6.png); - background-position: left -1929px; + background-position: left -2057px; } .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 -1944px; + background-position: left -2072px; } .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 -1959px; + background-position: left -2087px; } .v-window-light .v-window-contents { background: transparent; @@ -4687,7 +4857,7 @@ input.v-textfield-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 -1974px; + background-position: left -2102px; } .v-ie6 .v-window-light .v-window-wrap2 { background-image: none; diff --git a/WebContent/VAADIN/themes/reindeer/tabsheet/img/close-btn-hover.png b/WebContent/VAADIN/themes/reindeer/tabsheet/img/close-btn-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..f548db838a9e11238b7d6c833f2b571be4245e92 GIT binary patch literal 495 zcmVl?|?dt04?Ck8+ z)YQ(-&gkgrkdcz+=H{rWtK#C~fPsR`%gcg+9^Iqov8o z$!l$JVPj>8iHh;@@osQ)hK7ivq^4b8Vd?7X(9qE2)z#J6 z+1cIQ-Ota@*VotD+S=dW-`?Kd*4EZ+trQvn006&9L_t(|+FZ=n5`r)kMbQI-DE0!_ zvG*PoBt*#n|CA)oh_YVpp7U^#OK8Sw|42dCb+))x8I8W+`^GtpqhHYO$9((`yTc^T zZtQfUiC%?MUg?RXn1!BDbnDf+Ta*ol--JS|yXm$Hvf;cWPpxfhswW#p@VUdmWiZ62 z^E?n5ozZyIX~;&5yI_|rYL#r+FvBNHwEF=I`fZU6Wd%F~ib|88nN2avXwIKMKnR(x lBi0O4Vk1OdYJTc1zyKufKs%x8My&t<002ovPDHLkV1g!?5lR36 literal 0 HcmV?d00001 diff --git a/WebContent/VAADIN/themes/reindeer/tabsheet/img/close-btn-pressed.png b/WebContent/VAADIN/themes/reindeer/tabsheet/img/close-btn-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..a39a4431b38eecc17f40e5bde507b11ef636d4d4 GIT binary patch literal 520 zcmV+j0{8uiP)BGs?Ck8i zy1LEH&61RrYHDnZjE?B&=vP@=>gwukZ*faZPjq#5NJvU?a&xn@vsPDGnVFm5;NkD@ z@0696-QC@Oe}K@?(80mM=jiCx*4B4;d1`BH$;ruaa&+Y6wY9a*&d$HTzo@9F+}zxwqocRCx7ym;qN1X? zxw*r`!^+Ca(b3V!$jHUT#n;!@>+9>gySvrZ)x5mCzP`TG)6>t-&&ET7)IfDS&F@3Z`e)IMAM@pBCzcJUy$u&Kziom+<53HwD8m z#?SNRY_t0Z-+y0i&GR)BrTrb=0uOi59a!fGiCWf#nXQ3%(O&6RNA{@NrG~fnlxD8{ zP|h`}ar`4YrFE$zsquOs{Yqg{sPw5}SyFN88J?*-)HuDxO1m)#28}i~xO5e*C0xhE6sK*%37yZ;lfB^vYP(pxYx*%%+0000< KMNUMnLSTYBlOKox literal 0 HcmV?d00001 diff --git a/WebContent/VAADIN/themes/reindeer/tabsheet/img/close-btn-sel-hover.png b/WebContent/VAADIN/themes/reindeer/tabsheet/img/close-btn-sel-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..31a0d1f3f52fc6a46e0bd57aeafdc0947a054a21 GIT binary patch literal 909 zcmV;819JR{P){Z*fyqSx{3}&e79%dVI9Gynus*xV*pH+}z{j=8lk(&(hS%&e7rG<8X6y z#mLIDx4PTk;cIPixVpQQn3|TFoyf|}n46uUq@~!~-lL|c+~48K&d{*2veMMo&(YM+ z)781XzPY@<%FoiWwzsdcwXLtQQ&w2S#>vUc&f4AJs;;o6s;bx7+_1E_!p6t8xxBu@ z!?d@!uCun8oSwqP$j#8w$ji*QyS=oxy3^L#z{JI=tgo}Rw%6L+($?9&!NXBgSHZ)@ zOHNS6$;!&i&%(yY;NjxX)6~e!(9O`(ZEte2wYSdF)UdL&v9`IHnw!VU%)7tArmC#C zyuP`-zrMi3)!5s-zrn4svbw#$&(hPZv9zeFtGBwnyuib_y1cu+zs=Fqp`xR?y}+oe zuBoi8*xTQ}!o;etvb4Cnx4FB`&(X)q&7Ps6!NkU+sH(QRzQo4JOHWX{y}qxqwBX_6 zxVyaB+upXiy`7<>z{1AR)z{0-(ZR&UvbDC))7GM`nMw(V@&wr$(CZEvfs)}QQd*Ry(G2u4Mh+hgBxv#-koKqiyr_vbuz2l#l(S{A`- zrEi<{o?rTD_K_X3;!nc9{_JEn)x!F9#`izByJLMIr?^Ncg$W@cCI!>Qn@R(^(}huq zB^45}if+DJSOerK5Oc;kPH*P4Bl(3zIY4px2sO4wn?|@_J&_UxZ4?KFA&_=U1q??+ z;%Nj7ZV)hhneIg=;}eD$lY7ub4ZyIt#!@4fH9At6{R~y}Y9dN2q7tbh?OZ|6Y6&cP z)R&)rTb9(}a7ez1IaGT6+%pHEU@+7ttSG(xZd~!^V+hb_wB9uxGNt00000NkvXXu0mjfJ$D$D literal 0 HcmV?d00001 diff --git a/WebContent/VAADIN/themes/reindeer/tabsheet/img/close-btn-sel-pressed.png b/WebContent/VAADIN/themes/reindeer/tabsheet/img/close-btn-sel-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..9aae58c427690f6431ba4fde66c13fe85f2e8481 GIT binary patch literal 952 zcmV;p14sOcP)SCP zXxrc6NlZ}5%+6b0VP~rx5vrMb$NTTw77_lk+;0Rhl`EA!NRh(x!m2~wz|EG zkCL3AqT1cyo1dX}eSOKz(W0lR)z;USn3|lSrNG0*qNl3N&d_>$e4L`Bk&=?NxVwRZ zf@NoGij9=p-rt*|q_45H-{Rz;rKi2Z#N_7aq^hiUdw+|MlarR1admb;L`K=%-bhPL zk(QUayuYomvZ$=Dtgy48r>mo=tD>l?!NkUyo}by>-;kA-yS=|aLq(&espaPAj+B;^ zn3|TGp2Nn-n46x?($#x^fOL6!)YsXltFD=zp}M`mx4OH;$jX|XqMD$kg@%Wrr>CT- zs-B~!;NaoD!o;Mjtf8f;admlfc6z|X$FsG#hKh^V+TO&*$f&KbMM+Ghs;sK7vaqwa z=I7~+k(GgkhPAo8prfYY#5q14yfqNT08z{8@atE8%}p{A;)sjAi3+OV^>v$(sO zo}<>-+PJ&E+TGuVh>51Ft(~Hz%FoiRv9z?fyPcn)jE<3(nVRS6>WGPoy}`t!sja)e z!MeV|r>w7~sjauVy``zHl97_c0003aNklZDF?UY}>YN+qP}n z)>>=*yzbq4R_F5pTg1)4bHcmX?MPA_;PLqOSD*SICo7Z6sFqyd@frwiCm+9#!s9nR zAlN;!OU>KpDK1hrK(Gf&eBcl%w%-8Qy`PcJ)|o^joz%^cuoU5M3^=s`^{{ldDs6( afB^tYMu3O@EDaU_00006* zi_6c_>+SBq#Kq6k)yB!pa&&iBTVBY^&b`3Gud=pUU0&1I+0)k9#mURNz{1DM&8@Jr z&(hS+($wYW=-1lb($(3=%+Jfu(dOvsy}`q+u(H(G+OD#+t+BJk$<4I3xxB!_yuicR z-QTdZwUCmOyT8K1#mCFe(80vUba#5f#>$YBlu=Yyy1l= z&BMpa#L3L9v9!a;%gN2p%FfWu(bL%5-n+iRvbDFixw@~jw8O{A%FfZ;-{I!w=hxfa z*xcUD(bUk?*4EnG(bd=6-{IWg;@aKd$jr~#+~CR1(Z|cr-r?iQ&(h4$)8;`1djJ3c z&PhZ;RCwA{!Bs=TP#6Z_*Nq;rG1zDj6%`9HNdpzZzyb^w2Nh%g|K5w^&G$U`p`sP&D^0SwNiGJ~nEiJg8PV#4W?xFkxtjfZvvHdpEN zif7HW1*W9N_$PR>{j5h|)>bMC#`$A`lR(VR()V%{7U#`{-@-YsRlbv}nB(HU;7-sN zH=X=;1SXf%LS{%yI*H|41P+mS$sDfWm+Ib>Zt+EJ4qAKoq^_=?cJWQ^pI*%W2`~WV Wh+`w46y(VO000071RP+uPiYjgR&9^<7_K@9*!6jE#bXhKY)cl9QC9q^4nGW!Bc#XJ~7Mhl=X! z>uPLo<>lq)=jZ0;=H%q$>+9>{;^OS=?CI(0>gww4?d{{^hmo7`v`R z+qTH_T<%PGR7%NZS(fPgeq7g8ppWB7azDwkOsuM^5--m53yG*&YZOI+rfKB7ZJU7J zMNat&0SQY`deM!3@jZNhZu`DtSr$0wVoMY1Gb$TO(7LW+jEQZHr~#JiJkL0%Ji~Ia epq% literal 0 HcmV?d00001 diff --git a/WebContent/VAADIN/themes/sampler/sampler/home/btn-shadow-top.png b/WebContent/VAADIN/themes/sampler/sampler/home/btn-shadow-top.png new file mode 100644 index 0000000000000000000000000000000000000000..87a687f10fffa3a033fda5b5468fe8ae4d51aa59 GIT binary patch literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^Awb;2!3-p?-l*FMq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6&VEhgt-3t_3Q87zyJRIyMO=w@87>4J$m%~`SbVh-(S0S z?ZANp+qZAuvSrKW&71GtyZ7_w&;S4buROKjI8bk^r;B4q#jQ8zZ}K)9h%g*{K3jRh zzumn)>=V!2&tX)~t%=vT=Ty9^aJ^>MDgIf>U&7XjPQB*-q;uIu-I)7svohZPb}D&a zy69qG>x+v?i^?s<7p3o%|ME-6#a>*5tJP^?fChf*FY{kc1BO876-BK6s$YQ)V(@hJ Kb6Mw<&;$Ufuz}0~ literal 0 HcmV?d00001 diff --git a/WebContent/VAADIN/themes/sampler/sampler/home/label-grad.png b/WebContent/VAADIN/themes/sampler/sampler/home/label-grad.png new file mode 100644 index 0000000000000000000000000000000000000000..d44d24bf2c5f0962e34b715f2afb0581c443a11a GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^tUxTz!3HD`7q*rHDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MS-3!jv*Dda!xq1H8?OZ9QelWIZ0)rhlm@od#Y^ZP%A#hnVS)F^+tEM{tVQJCMUKueA4)a5x-dpCuJoeGN7_-ta&$i~p~ X%A;zV!lr#d!x=nX{an^LB{Ts5SV%p# literal 0 HcmV?d00001 diff --git a/src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java b/src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java index f73a2d4fc1..e66bf0fbc9 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java @@ -36,6 +36,8 @@ public class VTabsheet extends VTabsheetBase { private class TabSheetCaption extends VCaption { private boolean hidden = false; + private boolean closable = false; + private Element closeButton; TabSheetCaption() { super(null, client); @@ -57,12 +59,29 @@ public class VTabsheet extends VTabsheetBase { client.registerTooltip(VTabsheet.this, getElement(), null); } - return super.updateCaption(uidl); + boolean ret = super.updateCaption(uidl); + + setClosable(uidl.hasAttribute("closable")); + + return ret; } @Override public void onBrowserEvent(Event event) { + if (closable && event.getTypeInt() == Event.ONCLICK + && event.getEventTarget().cast() == closeButton) { + final String tabKey = tabKeys.get(tb.getTabIndex(this)) + .toString(); + if (!disabledTabKeys.contains(tabKey)) { + client.updateVariable(id, "close", tabKey, true); + event.stopPropagation(); + event.preventDefault(); + return; + } + } + super.onBrowserEvent(event); + if (event.getTypeInt() == Event.ONLOAD) { // icon onloads may change total width of tabsheet if (isDynamicWidth()) { @@ -108,6 +127,35 @@ public class VTabsheet extends VTabsheetBase { this.hidden = hidden; } + public void setClosable(boolean closable) { + this.closable = closable; + if (closable && closeButton == null) { + closeButton = DOM.createSpan(); + closeButton.setInnerText("x"); + closeButton + .setClassName(VTabsheet.CLASSNAME + "-caption-close"); + getElement().insertBefore(closeButton, + getElement().getLastChild()); + } else if (!closable && closeButton != null) { + getElement().removeChild(closeButton); + closeButton = null; + } + if (closable) { + addStyleDependentName("closable"); + } else { + removeStyleDependentName("closable"); + } + } + + @Override + public int getRequiredWidth() { + int width = super.getRequiredWidth(); + if (closeButton != null) { + width += Util.getRequiredWidth(closeButton); + } + return width; + } + } class TabBar extends ComplexPanel implements ClickHandler { @@ -217,6 +265,10 @@ public class VTabsheet extends VTabsheetBase { return (TabSheetCaption) getWidget(index); } + public int getTabIndex(TabSheetCaption tab) { + return getChildren().indexOf(tab); + } + public void setVisible(int index, boolean visible) { com.google.gwt.dom.client.Element e = getTab(index).getElement() .getParentElement().getParentElement(); @@ -804,13 +856,13 @@ public class VTabsheet extends VTabsheetBase { // Make sure scrollerIndex is valid if (scrollerIndex > tb.getTabCount()) { scrollerIndex = getNextVisibleTab(-1); - } else if (tb.getTab(scrollerIndex).isHidden()) { + } else if (tb.getTabCount() > 0 && tb.getTab(scrollerIndex).isHidden()) { scrollerIndex = getNextVisibleTab(scrollerIndex); } boolean scrolled = isScrolledTabs(); boolean clipped = isClippedTabs(); - if (tb.isVisible() && (scrolled || clipped)) { + if (tb.getTabCount() > 0 && tb.isVisible() && (scrolled || clipped)) { DOM.setStyleAttribute(scroller, "display", ""); DOM.setElementProperty(scrollerPrev, "className", SCROLLER_CLASSNAME + (scrolled ? "Prev" : "Prev-disabled")); diff --git a/src/com/vaadin/ui/TabSheet.java b/src/com/vaadin/ui/TabSheet.java index ed81fdb655..b58e7be7bf 100644 --- a/src/com/vaadin/ui/TabSheet.java +++ b/src/com/vaadin/ui/TabSheet.java @@ -35,7 +35,7 @@ public class TabSheet extends AbstractComponentContainer implements /** * Linked list of component tabs. */ - private final LinkedList components = new LinkedList(); + private final LinkedList components = new LinkedList(); /** * Map containing information related to the tabs (caption, icon etc). @@ -54,7 +54,9 @@ public class TabSheet extends AbstractComponentContainer implements */ private boolean tabsHidden; - private LinkedList paintedTabs = new LinkedList(); + private LinkedList paintedTabs = new LinkedList(); + + private CloseHandler closeHandler; /** * Constructs a new Tabsheet. Tabsheet is immediate by default. @@ -64,6 +66,11 @@ public class TabSheet extends AbstractComponentContainer implements // expand horizontally by default setWidth(100, UNITS_PERCENTAGE); setImmediate(true); + setCloseHandler(new CloseHandler() { + public void onTabClose(TabSheet tabsheet, Component c) { + tabsheet.removeComponent(c); + } + }); } /** @@ -72,7 +79,7 @@ public class TabSheet extends AbstractComponentContainer implements * * @return the Iterator of the components inside the container. */ - public Iterator getComponentIterator() { + public Iterator getComponentIterator() { return java.util.Collections.unmodifiableList(components).iterator(); } @@ -93,7 +100,7 @@ public class TabSheet extends AbstractComponentContainer implements if (components.isEmpty()) { selected = null; } else { - selected = (Component) components.getFirst(); + selected = components.getFirst(); fireSelectedTabChange(); } } @@ -168,8 +175,9 @@ public class TabSheet extends AbstractComponentContainer implements */ @Override public void moveComponentsFrom(ComponentContainer source) { - for (final Iterator i = source.getComponentIterator(); i.hasNext();) { - final Component c = (Component) i.next(); + for (final Iterator i = source.getComponentIterator(); i + .hasNext();) { + final Component c = i.next(); String caption = null; Resource icon = null; if (TabSheet.class.isAssignableFrom(source.getClass())) { @@ -199,8 +207,8 @@ public class TabSheet extends AbstractComponentContainer implements target.startTag("tabs"); - for (final Iterator i = getComponentIterator(); i.hasNext();) { - final Component component = (Component) i.next(); + for (final Iterator i = getComponentIterator(); i.hasNext();) { + final Component component = i.next(); Tab tab = tabs.get(component); /* @@ -236,6 +244,10 @@ public class TabSheet extends AbstractComponentContainer implements target.addAttribute("hidden", true); } + if (tab.isClosable()) { + target.addAttribute("closable", true); + } + final Resource icon = tab.getIcon(); if (icon != null) { target.addAttribute("icon", icon); @@ -417,6 +429,13 @@ public class TabSheet extends AbstractComponentContainer implements setSelectedTab((Component) keyMapper.get((String) variables .get("selected"))); } + if (variables.containsKey("close")) { + final Component tab = (Component) keyMapper.get((String) variables + .get("close")); + if (tab != null) { + closeHandler.onTabClose(this, tab); + } + } } /* Documented in superclass */ @@ -453,8 +472,8 @@ public class TabSheet extends AbstractComponentContainer implements int oldLocation = -1; int newLocation = -1; int location = 0; - for (final Iterator i = components.iterator(); i.hasNext();) { - final Component component = (Component) i.next(); + for (final Iterator i = components.iterator(); i.hasNext();) { + final Component component = i.next(); if (component == oldComponent) { oldLocation = location; @@ -635,6 +654,23 @@ public class TabSheet extends AbstractComponentContainer implements */ public void setVisible(boolean visible); + /** + * Returns the closability status for the tab. + * + * @return true if the tab is allowed to be closed by the end user, + * false for not allowing closing + */ + public boolean isClosable(); + + /** + * Sets the closability status for the tab. + * + * @param visible + * true if the end user is allowed to close the tab, false + * for not allowing to close. Should default to false. + */ + public void setClosable(boolean closable); + /** * Returns the enabled status for the tab. * @@ -710,6 +746,7 @@ public class TabSheet extends AbstractComponentContainer implements private Resource icon = null; private boolean enabled = true; private boolean visible = true; + private boolean closable = false; private String description = null; private ErrorMessage componentError = null; @@ -760,6 +797,19 @@ public class TabSheet extends AbstractComponentContainer implements requestRepaint(); } + public boolean isClosable() { + return closable; + } + + public void setClosable(boolean closable) { + this.closable = closable; + requestRepaint(); + } + + public void close() { + + } + public String getDescription() { return description; } @@ -777,6 +827,44 @@ public class TabSheet extends AbstractComponentContainer implements this.componentError = componentError; requestRepaint(); } + } + + /** + * CloseHandler is used to process tab closing events. Default behavior is + * to remove the tab from the TabSheet. + * + * @author Jouni Koivuviita / IT Mill Ltd. + * @since 6.2.0 + * + */ + public interface CloseHandler { + /** + * Called when a user has pressed the close icon of a tab in the client + * side widget. + * + * @param tabsheet + * the TabSheet to which the tab belongs to + * @param tabContent + * the component that corresponds to the tab whose close + * button was clicked + */ + void onTabClose(final TabSheet tabsheet, final Component tabContent); + } + + /** + * Provide a custom {@link CloseHandler} for this TabSheet if you wish to + * perform some additional tasks when a user clicks on a tabs close button, + * e.g. show a confirmation dialogue before removing the tab. + * + * To remove the tab, if you provide your own close handler, you must call + * {@link #removeComponent(Component)} yourself. + * + * The default CloseHandler for TabSheet will only remove the tab. + * + * @param handler + */ + public void setCloseHandler(CloseHandler handler) { + closeHandler = handler; } } -- 2.39.5