/**
*
*/
package com.piki.client.ui;
import java.util.ArrayList;
import java.util.List;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
public class WikiPageBox extends Composite {
private boolean readOnly = false;
public interface WikiPageBoxHandler extends EventHandler {
void onWikiPage(String wikiPageName);
}
private List<WikiPageBoxHandler> newHandler = new ArrayList<WikiPageBoxHandler>();
private List<WikiPageBoxHandler> selectHandler = new ArrayList<WikiPageBoxHandler>();
private List<WikiPageBoxHandler> deleteHandler = new ArrayList<WikiPageBoxHandler>();
Grid newPanel = null;
Grid selectPanel = null;
ListBox selectBox = null;
Grid deletePanel = null;
ListBox deleteBox = null;
/**
* default constructor
*/
public WikiPageBox() {
VerticalPanel panel = new VerticalPanel();
// new wiki page
newPanel = new Grid(2,2);
newPanel.setWidget(0, 0, new HTML("Name:"));
final TextBox name = new TextBox();
newPanel.setWidget(0, 1, name);
Button newButton = new Button("Erzeugen");
newButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
String wikiPageName = name.getText();
for (WikiPageBoxHandler handler: newHandler)
handler.onWikiPage(wikiPageName);
name.setText("");
}
});
newPanel.setWidget(1, 1, newButton);
panel.add(newPanel);
// Auswaehlen
selectPanel = new Grid(2,2);
selectPanel.setWidget(0, 0, new HTML("Name"));
selectBox = new ListBox();
selectPanel.setWidget(0, 1, selectBox);
Button selectButton = new Button("Auswählen");
selectButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
String wikiPageName = selectBox.getItemText(selectBox.getSelectedIndex());
for (WikiPageBoxHandler listener: selectHandler)
listener.onWikiPage(wikiPageName);
}
});
selectPanel.setWidget(1, 1, selectButton);
selectPanel.setVisible(false);
panel.add(selectPanel);
// delete panel
deletePanel = new Grid(2,2);
deletePanel.setWidget(0, 0, new HTML("Name"));
deleteBox = new ListBox();
deletePanel.setWidget(0, 1, deleteBox);
Button deleteButton = new Button("Löschen");
deleteButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
String wikiPageName = deleteBox.getItemText(deleteBox.getSelectedIndex());
for (WikiPageBoxHandler listener: deleteHandler)
listener.onWikiPage(wikiPageName);
}
});
deletePanel.setWidget(1, 1, deleteButton);
deletePanel.setVisible(false);
panel.add(deletePanel);
initWidget(panel);
}
public boolean isReadOnly() {
return readOnly;
}
public void setReadOnly(boolean readOnly) {
this.readOnly = readOnly;
visible();
}
public void addWikiPage(String wikiPageName) {
selectBox.addItem(wikiPageName);
deleteBox.addItem(wikiPageName);
visible();
}
public void focusOnWikiPage(String wikiPageName) {
if (wikiPageName != null) {
int index = -1;
for (int i = 0; i < selectBox.getItemCount(); i++) {
if (wikiPageName.equals(selectBox.getItemText(i))) {
index = i;
break;
}
}
if (index != -1)
selectBox.setItemSelected(index, true);
}
}
public void removeWikiPage(String wikiPageName) {
if (wikiPageName != null) {
Integer idSelctBox = null;
Integer idDeleteBox = null;
for (int i = 0; i < selectBox.getItemCount(); i++) {
if (wikiPageName.equals(selectBox.getItemText(i))) {
idSelctBox = i;
}
if (wikiPageName.equals(deleteBox.getItemText(i))) {
idDeleteBox = i;
}
}
if (idSelctBox != null) {
selectBox.removeItem(idSelctBox);
}
if (idDeleteBox != null) {
deleteBox.removeItem(idDeleteBox);
}
visible();
}
}
public void addNewWikiPageHandler(WikiPageBoxHandler wikiPageBoxHandler) {
newHandler.add(wikiPageBoxHandler);
}
public void addSelectWikiPageHandler(WikiPageBoxHandler handler) {
selectHandler.add(handler);
}
public void addDeleteWikiPageHandler(WikiPageBoxHandler handler) {
deleteHandler.add(handler);
}
protected void visible() {
if (!readOnly && selectBox.getItemCount() > 0) {
selectPanel.setVisible(true);
deletePanel.setVisible(true);
} else {
selectPanel.setVisible(false);
deletePanel.setVisible(false);
}
}
}