ckan-content-moderator-widget/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/ui/MainTabPanel.java

212 lines
4.9 KiB
Java
Raw Normal View History

2021-06-18 12:10:49 +02:00
package org.gcube.portlets.widgets.ckancontentmoderator.client.ui;
import java.util.ArrayList;
import java.util.List;
2021-06-22 17:38:42 +02:00
import org.gcube.portlets.widgets.ckancontentmoderator.client.ui.util.UtilFunct;
import com.github.gwtbootstrap.client.ui.Icon;
2021-06-18 12:10:49 +02:00
import com.github.gwtbootstrap.client.ui.Tab;
import com.github.gwtbootstrap.client.ui.TabPanel;
2021-06-22 17:38:42 +02:00
import com.github.gwtbootstrap.client.ui.constants.IconType;
2021-06-18 12:10:49 +02:00
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.dom.client.Style.Cursor;
2021-06-18 12:10:49 +02:00
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
2021-06-28 15:40:53 +02:00
import com.google.gwt.event.dom.client.LoadEvent;
import com.google.gwt.event.dom.client.LoadHandler;
2021-06-18 12:10:49 +02:00
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
2021-06-28 15:40:53 +02:00
import com.google.gwt.user.client.Element;
2021-06-18 12:10:49 +02:00
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
2021-06-22 18:09:16 +02:00
// TODO: Auto-generated Javadoc
2021-06-18 12:10:49 +02:00
/**
* The Class MainTabPanel.
*
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
*
2021-06-22 18:09:16 +02:00
* Jun 18, 2021
2021-06-18 12:10:49 +02:00
*/
public class MainTabPanel extends Composite {
private static MainTabPanelUiBinder uiBinder = GWT.create(MainTabPanelUiBinder.class);
/**
* The Interface MainTabPanelUiBinder.
*
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
*
2021-06-22 18:09:16 +02:00
* Jun 18, 2021
2021-06-18 12:10:49 +02:00
*/
interface MainTabPanelUiBinder extends UiBinder<Widget, MainTabPanel> {
}
private List<Tab> results = new ArrayList<Tab>();
@UiField
TabPanel mainTabPanel;
@UiField
Tab homeTab;
/**
* Instantiates a new main tab panel.
*/
public MainTabPanel() {
initWidget(uiBinder.createAndBindUi(this));
results.add(homeTab);
}
/**
* Adds the home widget.
*
* @param w the w
*/
public void addHomeWidget(Widget w) {
homeTab.add(w);
}
/**
* Adds the tab.
*
* @param heading the heading
2021-06-22 18:09:16 +02:00
* @param w the w
2021-06-18 12:10:49 +02:00
* @return the tab
*/
public Tab addTab(String heading, Widget w, boolean selectTab) {
2021-06-28 15:40:53 +02:00
final Tab tab = new Tab();
if (w instanceof CkanShowItemFrame) {
2021-06-28 15:40:53 +02:00
tab.setCustomIconStyle("icon-rotate-right icon-spin");
CkanShowItemFrame ckanFramePanel = (CkanShowItemFrame) w;
2021-06-28 15:40:53 +02:00
ckanFramePanel.getFrame().addLoadHandler(new LoadHandler() {
@Override
public void onLoad(LoadEvent event) {
tab.setIcon(IconType.BOOK);
setNoSpinner(tab);
}
});
}
2021-06-18 12:10:49 +02:00
tab.addClickHandler(new ClickHandler() {
2021-06-22 18:09:16 +02:00
2021-06-18 12:10:49 +02:00
@Override
public void onClick(ClickEvent event) {
}
});
2021-06-28 15:40:53 +02:00
2022-05-06 09:59:50 +02:00
Icon icon = new Icon(IconType.REMOVE);
icon.setTitle("Close this tab");
icon.getElement().getStyle().setCursor(Cursor.POINTER);
ClickHandler clickHandler = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
try {
mainTabPanel.remove(tab);
results.remove(tab);
mainTabPanel.selectTab(results.size() - 1);
} catch (Exception e) {
// silent
}
}
};
icon.addDomHandler(clickHandler, ClickEvent.getType());
tab.addDecorate(icon);
2021-06-22 17:38:42 +02:00
String shortTitle = UtilFunct.ellipsis(heading, 20, false);
tab.asWidget().setTitle(heading);
tab.setHeading(shortTitle);
2021-06-22 18:09:16 +02:00
if (w != null)
2021-06-18 12:10:49 +02:00
tab.add(w);
2021-06-22 18:09:16 +02:00
2021-06-18 12:10:49 +02:00
results.add(tab);
mainTabPanel.add(tab);
2021-06-28 15:40:53 +02:00
// activeTabPanels(false);
2021-06-22 18:09:16 +02:00
if (selectTab) {
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
2021-06-18 12:10:49 +02:00
@Override
public void execute() {
mainTabPanel.selectTab(results.size() - 1);
}
});
}
2021-06-22 18:09:16 +02:00
2021-06-18 12:10:49 +02:00
return tab;
}
/**
* Active tab panels.
*
* @param bool the bool
*/
private void activeTabPanels(boolean bool) {
for (Tab tab : results) {
tab.setActive(false);
}
}
/**
* Count tab.
*
* @return the int
*/
public int countTab() {
return results.size();
}
2021-06-22 18:09:16 +02:00
/**
* Close tabs.
*/
public void closeTabs() {
int tabSize = results.size();
GWT.log("tab size is: " + tabSize);
for (int i = 1; i < tabSize; i++) {
2021-06-28 15:40:53 +02:00
// each remove shifts any subsequent elements to the left, so I'm removing
// always the first element
mainTabPanel.remove(1);
2021-06-22 18:09:16 +02:00
results.remove(1);
}
2021-06-28 15:40:53 +02:00
// selecting Home Tab
2021-06-22 18:09:16 +02:00
selectTab(0);
}
2021-06-25 16:56:43 +02:00
public void selectTab(int tabIndex) {
2021-06-22 18:09:16 +02:00
if (tabIndex <= results.size()) {
mainTabPanel.selectTab(tabIndex);
}
}
2021-06-28 15:40:53 +02:00
/**
* Sets the no spinner.
*
* @param tab the new no spinner
*/
private void setNoSpinner(Tab tab) {
try {
tab.asTabLink().getAnchor().removeStyleName("icon-spin");
tab.asTabLink().getAnchor().removeStyleName("icon-rotate-right");
Element anchorElem = tab.asTabLink().getAnchor().asWidget().getElement();
anchorElem.getFirstChildElement().removeClassName("icon-spin");
anchorElem.getFirstChildElement().removeClassName("icon-rotate-right");
} catch (Exception e) {
// silent
2021-06-28 15:40:53 +02:00
}
tab.asTabLink().getAnchor().setIcon(IconType.BOOK);
// tab.asTabLink().getAnchor().setVisible(false);
// if(tab.asTabLink().getAnchor().setVisible(false);)
2021-06-28 15:40:53 +02:00
}
2021-06-22 18:09:16 +02:00
2021-06-18 12:10:49 +02:00
}