package org.onecmdb.ui.gwt.toolkit.client.view.table;
import org.onecmdb.ui.gwt.toolkit.client.control.input.AbstractAttributeValue;
import org.onecmdb.ui.gwt.toolkit.client.control.listener.order.IOrderListener;
import org.onecmdb.ui.gwt.toolkit.client.control.listener.order.ISourcesOrderEvents;
import org.onecmdb.ui.gwt.toolkit.client.control.listener.order.OrderEvent;
import org.onecmdb.ui.gwt.toolkit.client.control.listener.order.OrderListenerCollection;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.MouseListener;
import com.google.gwt.user.client.ui.Widget;
public class ColumnHeaderWidget extends Composite implements ISourcesOrderEvents {
OrderListenerCollection listeners = new OrderListenerCollection();
private boolean asc = false;
Image sortImage = new Image();
private HTML html;
private AbstractAttributeValue aValue;
public ColumnHeaderWidget(final AbstractAttributeValue aValue) {
this.aValue = aValue;
html = new HTML(aValue.getDisplayName(), false);
if (true) {
html.addClickListener(new ClickListener() {
public void onClick(Widget sender) {
setAscending(!getAscending());
listeners.fireOnOrderEvent(new OrderEvent(ColumnHeaderWidget.this, aValue, getAscending()));
}
});
initWidget(html);
return;
}
HorizontalPanel hPanel = new HorizontalPanel();
Label name = new Label(aValue.getDisplayName(), false);
hPanel.setWidth("100%");
hPanel.add(name);
hPanel.setCellWidth(name, "100%");
if (aValue.isSortable()) {
hPanel.add(sortImage);
hPanel.setCellVerticalAlignment(sortImage, HorizontalPanel.ALIGN_MIDDLE);
sortImage.setVisible(false);
name.addMouseListener(new MouseListener() {
public void onMouseDown(Widget sender, int x, int y) {
// TODO Auto-generated method stub
}
public void onMouseEnter(Widget sender) {
}
public void onMouseLeave(Widget sender) {
// TODO Auto-generated method stub
}
public void onMouseMove(Widget sender, int x, int y) {
// TODO Auto-generated method stub
}
public void onMouseUp(Widget sender, int x, int y) {
// TODO Auto-generated method stub
}
});
name.addClickListener(new ClickListener() {
public void onClick(Widget sender) {
setAscending(!getAscending());
listeners.fireOnOrderEvent(new OrderEvent(ColumnHeaderWidget.this, aValue, getAscending()));
}
});
}
initWidget(hPanel);
}
private boolean getAscending() {
return(this.asc);
}
private void setAscending(boolean v) {
System.out.println("Set Ascending = " + v);
this.asc = v;
if (this.asc) {
html.setHTML(aValue.getDisplayName() + "<img src=\"images/sort_asc.gif\">");
//sortImage.setUrl("images/sort_asc.gif");
} else {
//sortImage.setUrl("images/sort_desc.gif");
html.setHTML(aValue.getDisplayName() + "<img src=\"images/sort_desc.gif\">");
}
//setSortVisable(true);
}
public void setSortVisable(boolean value) {
if (!value) {
html.setHTML(aValue.getDisplayName());
//sortImage.setVisible(value);
}
}
public void addOrderListener(IOrderListener listener) {
listeners.add(listener);
}
public void removeOrderListener(IOrderListener listener) {
listeners.remove(listener);
}
}