package org.openrosa.client.widget;
import org.openrosa.client.controller.IFormActionListener;
import org.openrosa.client.util.FormDesignerUtil;
import org.openrosa.client.util.FormUtil;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.Widget;
/**
* Widget for tree items which gives them a context menu.
*
* @author daniel
*
*/
public class TreeItemWidget extends Composite{
/** Popup panel for the context menu. */
private PopupPanel popup;
/** Listener for form action events. */
private IFormActionListener formActionListener;
/**
* Creates a new tree item.
*
* @param imageProto the item image.
* @param caption the time caption or text.
* @param popup the pop up panel for context menu.
* @param formActionListener listener to form action events.
*/
public TreeItemWidget(ImageResource imageProto, String caption, PopupPanel popup,IFormActionListener formActionListener){
this.popup = popup;
this.formActionListener = formActionListener;
HorizontalPanel hPanel = new HorizontalPanel();
hPanel.setSpacing(0);
hPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
hPanel.add(FormUtil.createImage(imageProto));
//HTML headerText = new HTML(caption); //Replaced with Label due to bug which surfaces when we have text including things like "<sdsff>"
Widget headerText = new Label(caption);
hPanel.add(headerText);
hPanel.setStyleName("gwt-noWrap");
initWidget(hPanel);
DOM.sinkEvents(getElement(), DOM.getEventsSunk(getElement()) | Event.ONMOUSEDOWN | Event.ONKEYDOWN );
}
@Override
public void onBrowserEvent(Event event) {
if (DOM.eventGetType(event) == Event.ONMOUSEDOWN) {
if( (event.getButton() & Event.BUTTON_RIGHT) != 0 /*&& !Context.isStructureReadOnly()*/){
int ypos = event.getClientY();
if(Window.getClientHeight() - ypos < 350)
ypos = event.getClientY() - 350;
FormDesignerUtil.disableContextMenu(popup.getElement());
popup.setPopupPosition(event.getClientX(), ypos);
popup.show();
}
}
else if(DOM.eventGetType(event) == Event.ONKEYDOWN){
if(event.getKeyCode() == KeyCodes.KEY_DELETE)
formActionListener.deleteSelectedItem();
}
}
}