package org.activityinfo.ui.client.page.app;
/*
* #%L
* ActivityInfo Server
* %%
* Copyright (C) 2009 - 2013 UNICEF
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
import com.extjs.gxt.ui.client.core.El;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NodeList;
import com.google.gwt.event.logical.shared.HasSelectionHandlers;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.Widget;
public class SectionTabStrip extends Widget implements HasSelectionHandlers<Section> {
private static SectionTabStripUiBinder uiBinder = GWT.create(SectionTabStripUiBinder.class);
interface SectionTabStripUiBinder extends UiBinder<Element, SectionTabStrip> {
}
interface MyStyle extends CssResource {
String section();
String activeSection();
String hoverSection();
}
@UiField DivElement sectionDiv;
@UiField MyStyle style;
// Not ready yet
// SectionPopup popup;
DivElement hoverElement;
public SectionTabStrip() {
setElement(uiBinder.createAndBindUi(this));
sinkEvents(Event.MOUSEEVENTS);
sinkEvents(Event.ONCLICK);
// popup = new SectionPopup();
}
@Override
public void onBrowserEvent(Event event) {
El element = El.fly(Element.as(event.getEventTarget()));
switch (DOM.eventGetType(event)) {
case Event.ONMOUSEOVER:
if (element.hasStyleName(style.section())) {
unhighlight();
highlight(element.dom);
}
break;
case Event.ONMOUSEOUT:
if (hoverElement != null && element.dom.isOrHasChild(hoverElement)) {
unhighlight();
}
// popup.delayedHide();
break;
case Event.ONCLICK:
if (element.hasStyleName(style.section())) {
int index = element.getParent().getChildIndex(element.dom);
SelectionEvent.fire(this, Section.values()[index]);
}
break;
}
}
private void unhighlight() {
if (hoverElement != null) {
hoverElement.removeClassName(style.hoverSection());
}
}
private void highlight(Element element) {
hoverElement = element.cast();
hoverElement.addClassName(style.hoverSection());
// popup.setPopupPosition(element.getAbsoluteLeft(),
// element.getAbsoluteBottom());
// popup.delayedShow();SectionPopup popup;
}
public void setSelection(Section section) {
NodeList<com.google.gwt.user.client.Element> tabs = El.fly(sectionDiv).select("." + style.section());
for (int i = 0; i != tabs.getLength(); ++i) {
Element tab = tabs.getItem(i).cast();
if (section != null && i == section.ordinal()) {
tab.addClassName(style.activeSection());
} else {
tab.removeClassName(style.activeSection());
}
}
}
@Override
public HandlerRegistration addSelectionHandler(SelectionHandler<Section> handler) {
return addHandler(handler, SelectionEvent.getType());
}
}