I am working on upgrading an existing product from using SmartGWT 5.1 to use SmartGWT 12.0.
There are screens in our product that use TabSets. If there is a validation failure when data is saved, we set an error icon
on the tab(s) that have invalid data provided. This is done by calling the Tab.setIcon API.
I found that this call is not working in SmartGWT 12.0.
Version information:
SmartClient Version: v12.0p_2019-09-11/PowerEdition Deployment (built 2019-09-11)
I put together a sample based on a sample from the showcase.
In this sample (below), when the tab text is modified, it should display a + icon on the tab.
If I have access to the TabSet directly, I can call tabSet.setTabIcon and pass in the Tab object. This works, and the icon is properly displayed.
However, if I call tab.setIcon, it does not work. I found that in the decompiled SmartGWT code, tab.setIcon will call tabSet.setTabIcon(getID(), icon);
Therefore, I also tried calling tabSet.setTabIcon(tab.getID(), icon) and, as I expected, it does not work either.
There are screens in our product that use TabSets. If there is a validation failure when data is saved, we set an error icon
on the tab(s) that have invalid data provided. This is done by calling the Tab.setIcon API.
I found that this call is not working in SmartGWT 12.0.
Version information:
SmartClient Version: v12.0p_2019-09-11/PowerEdition Deployment (built 2019-09-11)
I put together a sample based on a sample from the showcase.
In this sample (below), when the tab text is modified, it should display a + icon on the tab.
If I have access to the TabSet directly, I can call tabSet.setTabIcon and pass in the Tab object. This works, and the icon is properly displayed.
However, if I call tab.setIcon, it does not work. I found that in the decompiled SmartGWT code, tab.setIcon will call tabSet.setTabIcon(getID(), icon);
Therefore, I also tried calling tabSet.setTabIcon(tab.getID(), icon) and, as I expected, it does not work either.
Code:
package com.smartgwt.sample.showcase.client.componentXML;
/*
* Smart GWT (GWT for SmartClient)
* Copyright 2008 and beyond, Isomorphic Software, Inc.
*
* Smart GWT is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License version 3
* as published by the Free Software Foundation. Smart GWT is also
* available under typical commercial license terms - see
* http://smartclient.com/license
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
/*
* Smart GWT (GWT for SmartClient)
* Copyright 2008 and beyond, Isomorphic Software, Inc.
*
* Smart GWT is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License version 3
* is published by the Free Software Foundation. Smart GWT is also
* available under typical commercial license terms - see
* http://smartclient.com/license
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
import com.smartgwt.client.types.Side;
import com.smartgwt.client.types.TabTitleEditEvent;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.Img;
import com.smartgwt.client.widgets.layout.VLayout;
import com.smartgwt.client.widgets.tab.Tab;
import com.smartgwt.client.widgets.tab.TabSet;
import com.smartgwt.client.widgets.tab.events.TabTitleChangedEvent;
import com.smartgwt.client.widgets.tab.events.TabTitleChangedHandler;
import com.smartgwt.sample.showcase.client.PanelFactory;
import com.smartgwt.sample.showcase.client.ShowcasePanel;
import com.google.gwt.core.client.EntryPoint;
public class TabsEditableTitlesSample extends ShowcasePanel {
private static final String DESCRIPTION =
"Tabs Editable Titles Sample";
public static class Factory implements PanelFactory {
private String id;
public ShowcasePanel create() {
TabsEditableTitlesSample panel = new TabsEditableTitlesSample();
id = panel.getID();
return panel;
}
public String getID() {
return id;
}
public String getDescription() {
return DESCRIPTION;
}
}
public void onModuleLoad() {
}
@Override
public Canvas getViewPanel() {
final TabSet tabSet = new TabSet();
tabSet.setTabBarPosition(Side.TOP);
tabSet.setTabBarAlign(Side.LEFT);
tabSet.setWidth(500);
tabSet.setHeight(200);
tabSet.setCanEditTabTitles(true);
tabSet.setTitleEditEvent(TabTitleEditEvent.DOUBLECLICK);
tabSet.setTitleEditorTopOffset(2);
Tab tab1 = new Tab("Blue");
//tab1.setIcon("pieces/16/pawn_blue.png", 16);
tab1.setCanClose(true);
Img img1 = new Img("pieces/48/pawn_blue.png", 48, 48);
tab1.setPane(img1);
Tab tab2 = new Tab("Green");
//tab2.setIcon("pieces/16/pawn_green.png", 16);
Img img2 = new Img("pieces/48/pawn_green.png", 48, 48);
tab2.setPane(img2);
final Tab validatedTab = new Tab("123-Yellow");
//validatedTab.setIcon("pieces/16/pawn_yellow.png", 16);
final Img validatedTabImg = new Img("pieces/48/pawn_yellow.png", 48, 48);
validatedTab.setPane(validatedTabImg);
final Tab uneditableTab = new Tab("Can't Change Me");
//uneditableTab.setIcon("pieces/16/pawn_red.png", 16);
uneditableTab.setCanEditTitle(false);
Img uneditableTabImg = new Img("pieces/48/pawn_red.png", 48, 48);
uneditableTab.setPane(uneditableTabImg);
tabSet.addTab(tab1);
tabSet.addTab(tab2);
tabSet.addTab(validatedTab);
tabSet.addTab(uneditableTab);
tabSet.addTabTitleChangedHandler(new TabTitleChangedHandler() {
@Override
public void onTabTitleChanged(TabTitleChangedEvent event) {
Tab tab = event.getTab();
if (tab.equals(validatedTab) && (event.getNewTitle() == null || !event.getNewTitle().substring(0, 4).equals("123-"))) {
SC.warn("Tab title must start with the prefix \"123-\"");
event.cancel();
}
tab.setIcon("icons/16/icon_add.png"); // -- DOES NOT WORK
// tabSet.setTabIcon(tab, "icons/16/icon_add.png"); // -- WORKS
// tabSet.setTabIcon(tab.getID(), "icons/16/icon_add.png"); // -- DOES NOT WORK
}
});
final VLayout layout = new VLayout();
layout.setWidth("100%");
layout.setHeight("90%");
layout.setMembersMargin(10);
layout.setMembers(tabSet);
return layout;
}
}
Comment