package com.gwt.ui.client.supertable;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
/**
*
* @author ibouakl
*
*/
public class SuperTableColumnSelector extends PopupPanel {
private CheckBox[] checkboxes;
private boolean[] checked;
private ColumnProperty[] columns;
private SuperTableColumnSelectorListener listener;
/**
* A constructor for this class.
*
* @param columns
* @param listener
*/
public SuperTableColumnSelector(ColumnProperty[] columns, SuperTableColumnSelectorListener listener) {
super(true);
this.columns = columns;
this.listener = listener;
setStyleName("gwtcomp-SuperTableColumnSelector");
init();
}
private void init() {
VerticalPanel p = new VerticalPanel();
checkboxes = new CheckBox[columns.length];
checked = new boolean[columns.length];
for (int i = 0; i < checkboxes.length; i++) {
checkboxes[i] = new CheckBox(columns[i].getHeader());
checkboxes[i].setValue(columns[i].isDisplayed());
checkboxes[i].setVisible(columns[i].isAddToColumnsSelection());
checked[i] = columns[i].isDisplayed();
class CheckboxClickListener implements ClickHandler {
private int i;
public CheckboxClickListener(int i) {
this.i = i;
}
@Override
public void onClick(ClickEvent sender) {
checked[i] = ((CheckBox)sender.getSource()).getValue();
}
}
checkboxes[i].addClickHandler(new CheckboxClickListener(i));
p.add(checkboxes[i]);
}
add(p);
addCloseHandler(new CloseHandler<PopupPanel>() {
@Override
public void onClose(CloseEvent<PopupPanel> arg0) {
boolean changed = false;
for (int i = 0; i < SuperTableColumnSelector.this.columns.length; i++) {
if (SuperTableColumnSelector.this.columns[i].isDisplayed() != checked[i]) {
changed = true;
SuperTableColumnSelector.this.columns[i].setDisplayed(checked[i]);
}
}
if ((changed) && (SuperTableColumnSelector.this.listener != null)) {
SuperTableColumnSelector.this.listener.columnSelectionChanged(SuperTableColumnSelector.this.columns);
}
}
});
}
public boolean[] getChecked() {
return checked;
}
}