aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormichaelvogt <michael@vaadin.com>2013-06-25 11:47:38 +0300
committerVaadin Code Review <review@vaadin.com>2013-07-08 11:44:39 +0000
commit8b5a7e940b8fcbaaf135ec3c395ffc38c62d5a1b (patch)
tree30c65f97cb5ded5e5e79915f1ee19e8fde86b0a0
parent00c473abf05da9bc8c755e6fef54f119ece698aa (diff)
downloadvaadin-framework-8b5a7e940b8fcbaaf135ec3c395ffc38c62d5a1b.tar.gz
vaadin-framework-8b5a7e940b8fcbaaf135ec3c395ffc38c62d5a1b.zip
Tabsheet tabs should support alternate text (#11824)
Change-Id: I000fe6102291d8bd9bbe484b5683b50c40c8470b
-rw-r--r--client/src/com/vaadin/client/VCaption.java12
-rw-r--r--client/src/com/vaadin/client/ui/Icon.java22
-rw-r--r--client/src/com/vaadin/client/ui/VTabsheet.java3
-rw-r--r--server/src/com/vaadin/ui/TabSheet.java108
-rw-r--r--shared/src/com/vaadin/shared/ui/tabsheet/TabsheetBaseConstants.java2
-rw-r--r--uitest/src/com/vaadin/tests/components/tabsheet/TabSheetIcons.html10
-rw-r--r--uitest/src/com/vaadin/tests/components/tabsheet/TabSheetIcons.java2
-rw-r--r--uitest/src/com/vaadin/tests/components/tabsheet/TabSheetTest.java2
8 files changed, 153 insertions, 8 deletions
diff --git a/client/src/com/vaadin/client/VCaption.java b/client/src/com/vaadin/client/VCaption.java
index d0338de4a1..b5d0230087 100644
--- a/client/src/com/vaadin/client/VCaption.java
+++ b/client/src/com/vaadin/client/VCaption.java
@@ -42,6 +42,8 @@ public class VCaption extends HTML {
private Icon icon;
+ private String iconAltText = "";
+
private Element captionText;
private final ApplicationConnection client;
@@ -300,6 +302,14 @@ public class VCaption extends HTML {
@Deprecated
public boolean updateCaptionWithoutOwner(String caption, boolean disabled,
boolean hasDescription, boolean hasError, String iconURL) {
+ return updateCaptionWithoutOwner(caption, disabled, hasDescription,
+ hasError, iconURL, "");
+ }
+
+ @Deprecated
+ public boolean updateCaptionWithoutOwner(String caption, boolean disabled,
+ boolean hasDescription, boolean hasError, String iconURL,
+ String iconAltText) {
boolean wasPlacedAfterComponent = placedAfterComponent;
// Caption is placed after component unless there is some part which
@@ -332,7 +342,7 @@ public class VCaption extends HTML {
// Icon forces the caption to be above the component
placedAfterComponent = false;
- icon.setUri(iconURL);
+ icon.setUri(iconURL, iconAltText);
} else if (icon != null) {
// Remove existing
diff --git a/client/src/com/vaadin/client/ui/Icon.java b/client/src/com/vaadin/client/ui/Icon.java
index 5ba3cc6eeb..f02f0e10a8 100644
--- a/client/src/com/vaadin/client/ui/Icon.java
+++ b/client/src/com/vaadin/client/ui/Icon.java
@@ -34,11 +34,19 @@ public class Icon extends UIObject {
}
public Icon(ApplicationConnection client, String uidlUri) {
+ this(client, uidlUri, "");
+ }
+
+ public Icon(ApplicationConnection client, String uidlUri, String iconAltText) {
this(client);
- setUri(uidlUri);
+ setUri(uidlUri, iconAltText);
}
public void setUri(String uidlUri) {
+ setUri(uidlUri, "");
+ }
+
+ public void setUri(String uidlUri, String uidlAlt) {
if (!uidlUri.equals(myUri)) {
/*
* Start sinking onload events, widgets responsibility to react. We
@@ -51,6 +59,18 @@ public class Icon extends UIObject {
DOM.setElementProperty(getElement(), "src", uri);
myUri = uidlUri;
}
+
+ setAlternateText(uidlAlt);
}
+ /**
+ * Sets the alternate text for the icon.
+ *
+ * @param uidlAlt
+ * with the alternate text. Must be non null
+ */
+ public void setAlternateText(String uidlAlt) {
+ assert uidlAlt != null : "Alternate text must be non null";
+ DOM.setElementProperty(getElement(), "alt", uidlAlt);
+ }
}
diff --git a/client/src/com/vaadin/client/ui/VTabsheet.java b/client/src/com/vaadin/client/ui/VTabsheet.java
index dc20c27837..10fa0dff16 100644
--- a/client/src/com/vaadin/client/ui/VTabsheet.java
+++ b/client/src/com/vaadin/client/ui/VTabsheet.java
@@ -291,7 +291,8 @@ public class VTabsheet extends VTabsheetBase implements Focusable,
uidl.hasAttribute(TabsheetBaseConstants.ATTRIBUTE_TAB_DISABLED),
uidl.hasAttribute(TabsheetBaseConstants.ATTRIBUTE_TAB_DESCRIPTION),
uidl.hasAttribute(TabsheetBaseConstants.ATTRIBUTE_TAB_ERROR_MESSAGE),
- uidl.getStringAttribute(TabsheetBaseConstants.ATTRIBUTE_TAB_ICON));
+ uidl.getStringAttribute(TabsheetBaseConstants.ATTRIBUTE_TAB_ICON),
+ uidl.getStringAttribute(TabsheetBaseConstants.ATTRIBUTE_TAB_ICON_ALT));
setClosable(uidl.hasAttribute("closable"));
diff --git a/server/src/com/vaadin/ui/TabSheet.java b/server/src/com/vaadin/ui/TabSheet.java
index 2c85b279cd..3ba1861b6f 100644
--- a/server/src/com/vaadin/ui/TabSheet.java
+++ b/server/src/com/vaadin/ui/TabSheet.java
@@ -268,7 +268,34 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
* @return the created {@link Tab}
*/
public Tab addTab(Component c, String caption, Resource icon) {
- return addTab(c, caption, icon, components.size());
+ return addTab(c, caption, icon, "", components.size());
+ }
+
+ /**
+ * Adds a new tab into TabSheet.
+ *
+ * The first tab added to a tab sheet is automatically selected and a tab
+ * selection event is fired.
+ *
+ * If the component is already present in the tab sheet, changes its caption
+ * and icon and icon alternate text and returns the corresponding (old) tab,
+ * preserving other tab metadata.
+ *
+ * @param c
+ * the component to be added onto tab - should not be null.
+ * @param caption
+ * the caption to be set for the component and used rendered in
+ * tab bar
+ * @param icon
+ * the icon to be set for the component and used rendered in tab
+ * bar
+ * @param iconAltText
+ * the alternate text for the icon
+ * @return the created {@link Tab}
+ */
+ public Tab addTab(Component c, String caption, Resource icon,
+ String iconAltText) {
+ return addTab(c, caption, icon, iconAltText, components.size());
}
/**
@@ -294,12 +321,41 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
* @return the created {@link Tab}
*/
public Tab addTab(Component c, String caption, Resource icon, int position) {
+ return addTab(c, caption, icon, "", position);
+ }
+
+ /**
+ * Adds a new tab into TabSheet.
+ *
+ * The first tab added to a tab sheet is automatically selected and a tab
+ * selection event is fired.
+ *
+ * If the component is already present in the tab sheet, changes its caption
+ * and icon and icon alternate text and returns the corresponding (old) tab,
+ * preserving other tab metadata like the position.
+ *
+ * @param c
+ * the component to be added onto tab - should not be null.
+ * @param caption
+ * the caption to be set for the component and used rendered in
+ * tab bar
+ * @param icon
+ * the icon to be set for the component and used rendered in tab
+ * bar
+ * @param iconAltText
+ * the alternate text for the icon
+ * @param position
+ * the position at where the the tab should be added.
+ * @return the created {@link Tab}
+ */
+ public Tab addTab(Component c, String caption, Resource icon,
+ String iconAltText, int position) {
if (c == null) {
return null;
} else if (tabs.containsKey(c)) {
Tab tab = tabs.get(c);
tab.setCaption(caption);
- tab.setIcon(icon);
+ tab.setIcon(icon, iconAltText);
return tab;
} else {
components.add(position, c);
@@ -371,13 +427,15 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
final Component c = i.next();
String caption = null;
Resource icon = null;
+ String iconAltText = "";
if (TabSheet.class.isAssignableFrom(source.getClass())) {
Tab tab = ((TabSheet) source).getTab(c);
caption = tab.getCaption();
icon = tab.getIcon();
+ iconAltText = tab.getIconAltText();
}
source.removeComponent(c);
- addTab(c, caption, icon);
+ addTab(c, caption, icon, iconAltText);
}
}
@@ -429,6 +487,9 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
if (icon != null) {
target.addAttribute(TabsheetBaseConstants.ATTRIBUTE_TAB_ICON,
icon);
+ target.addAttribute(
+ TabsheetBaseConstants.ATTRIBUTE_TAB_ICON_ALT,
+ tab.getIconAltText());
}
final String caption = tab.getCaption();
if (caption != null && !caption.isEmpty()) {
@@ -937,6 +998,27 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
public void setIcon(Resource icon);
/**
+ * Sets the icon and alt text for the tab.
+ *
+ * @param icon
+ * the icon to set
+ */
+ public void setIcon(Resource icon, String iconAltText);
+
+ /**
+ * Gets the icon alt text for the tab.
+ */
+ public String getIconAltText();
+
+ /**
+ * Sets the icon alt text for the tab.
+ *
+ * @param iconAltText
+ * the icon to set
+ */
+ public void setIconAltText(String iconAltText);
+
+ /**
* Gets the description for the tab. The description can be used to
* briefly describe the state of the tab to the user, and is typically
* shown as a tooltip when hovering over the tab.
@@ -1053,6 +1135,7 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
private ErrorMessage componentError = null;
private String styleName;
private String id;
+ private String iconAltText = "";
public TabSheetTabImpl(String caption, Resource icon) {
if (caption == null) {
@@ -1084,7 +1167,24 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
@Override
public void setIcon(Resource icon) {
+ setIcon(icon, "");
+ }
+
+ @Override
+ public void setIcon(Resource icon, String iconAltText) {
this.icon = icon;
+ this.iconAltText = iconAltText;
+ markAsDirty();
+ }
+
+ @Override
+ public String getIconAltText() {
+ return iconAltText;
+ }
+
+ @Override
+ public void setIconAltText(String iconAltText) {
+ this.iconAltText = iconAltText;
markAsDirty();
}
@@ -1344,7 +1444,7 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
*/
private static void copyTabMetadata(Tab from, Tab to) {
to.setCaption(from.getCaption());
- to.setIcon(from.getIcon());
+ to.setIcon(from.getIcon(), from.getIconAltText());
to.setDescription(from.getDescription());
to.setVisible(from.isVisible());
to.setEnabled(from.isEnabled());
diff --git a/shared/src/com/vaadin/shared/ui/tabsheet/TabsheetBaseConstants.java b/shared/src/com/vaadin/shared/ui/tabsheet/TabsheetBaseConstants.java
index 7eb23a9887..b7f337a5a8 100644
--- a/shared/src/com/vaadin/shared/ui/tabsheet/TabsheetBaseConstants.java
+++ b/shared/src/com/vaadin/shared/ui/tabsheet/TabsheetBaseConstants.java
@@ -29,5 +29,7 @@ public class TabsheetBaseConstants implements Serializable {
public static final String ATTRIBUTE_TAB_CAPTION = "caption";
@Deprecated
public static final String ATTRIBUTE_TAB_ICON = "icon";
+ @Deprecated
+ public static final String ATTRIBUTE_TAB_ICON_ALT = "iconalt";
}
diff --git a/uitest/src/com/vaadin/tests/components/tabsheet/TabSheetIcons.html b/uitest/src/com/vaadin/tests/components/tabsheet/TabSheetIcons.html
index 425da11af4..6876497a1f 100644
--- a/uitest/src/com/vaadin/tests/components/tabsheet/TabSheetIcons.html
+++ b/uitest/src/com/vaadin/tests/components/tabsheet/TabSheetIcons.html
@@ -21,6 +21,16 @@
<td></td>
<td></td>
</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestscomponentstabsheetTabSheetIcons::/VVerticalLayout[0]/Slot[1]/VVerticalLayout[0]/Slot[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]@alt</td>
+ <td>iconalt1</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestscomponentstabsheetTabSheetIcons::/VVerticalLayout[0]/Slot[1]/VVerticalLayout[0]/Slot[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]@alt</td>
+ <td>iconalt3</td>
+</tr>
</tbody></table>
</body>
diff --git a/uitest/src/com/vaadin/tests/components/tabsheet/TabSheetIcons.java b/uitest/src/com/vaadin/tests/components/tabsheet/TabSheetIcons.java
index 5d814ec48f..ccdc4ecb38 100644
--- a/uitest/src/com/vaadin/tests/components/tabsheet/TabSheetIcons.java
+++ b/uitest/src/com/vaadin/tests/components/tabsheet/TabSheetIcons.java
@@ -46,6 +46,8 @@ public class TabSheetIcons extends TestBase {
for (Component c : tab) {
tabsheet.addTab(c);
+ tabsheet.getTab(c).setIconAltText(
+ "iconalt" + tabsheet.getComponentCount());
}
return tabsheet;
diff --git a/uitest/src/com/vaadin/tests/components/tabsheet/TabSheetTest.java b/uitest/src/com/vaadin/tests/components/tabsheet/TabSheetTest.java
index 6c39cdab73..56836037b7 100644
--- a/uitest/src/com/vaadin/tests/components/tabsheet/TabSheetTest.java
+++ b/uitest/src/com/vaadin/tests/components/tabsheet/TabSheetTest.java
@@ -26,7 +26,7 @@ public class TabSheetTest<T extends TabSheet> extends
@Override
public void execute(T c, Integer value, Object data) {
- c.getTab(value).setIcon((Resource) data);
+ c.getTab(value).setIcon((Resource) data, "tabicon");
}
};