package com.chemhack.jsMolEditor.client.widget;
import com.google.gwt.user.client.ui.*;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.Command;
import com.google.gwt.core.client.GWT;
import com.chemhack.jsMolEditor.client.resources.MyImageBundle;
import java.util.ArrayList;
import java.util.List;
public class ElementChoser extends Composite {
MyImageBundle myImageBundle = (MyImageBundle) GWT.create(MyImageBundle.class);
List<OptionButton> options = new ArrayList<OptionButton>();
ToggleButton dropDownButton = new ToggleButton(myImageBundle.dropDownSmall().createImage());
ToggleButton selectedElementButton = new ToggleButton("C");
HorizontalPanel hp = new HorizontalPanel();
VerticalPanel dropDownMenu = new VerticalPanel();
PopupPanel dropDownWrapper = new PopupPanel();
boolean isMenuShowed = false;
Command upAllToggle;
ClickListener defaultOptionClickListener = new ClickListener() {
public void onClick(Widget sender) {
// OptionButton optionButton = (OptionButton) sender;
// if (optionButton != selectedOptionWrapper.getWidget()) { //Selecting new option from dropdown menu
// selectOption(optionButton);
// toggleMenuShowed();
// }
// if (upAllToggle != null) upAllToggle.execute();
// ((OptionButton) selectedOptionWrapper.getWidget()).setDown(true);
//
}
};
private void toggleMenuShowed() {
if (isMenuShowed) {
hideDropDownMenu();
} else {
showDropDownMenu();
}
}
public ElementChoser() {
super();
hp.add(selectedElementButton);
hp.add(dropDownButton);
dropDownMenu.setWidth(hp.getOffsetWidth() + "px");
dropDownWrapper.add(dropDownMenu);
dropDownWrapper.setStyleName(null);
selectedElementButton.setHeight("16px");
selectedElementButton.addStyleName("buttonElement");
initWidget(hp);
dropDownButton.addClickListener(new ClickListener() {
public void onClick(Widget sender) {
toggleMenuShowed();
}
});
}
private void selectOption(OptionButton selectedOption) {
// selectedOption.removeFromParent();
// selectedOption.setDown(false);
// selectedOptionWrapper.clear();
// selectedOptionWrapper.add(selectedOption);
}
private void showDropDownMenu() {
// dropDownWrapper.setPopupPosition(hp.getAbsoluteLeft(), hp.getAbsoluteTop() + hp.getOffsetHeight());
// dropDownWrapper.show();
// dropDownMenu.clear();
// for (OptionButton option : options) {
// if (option != selectedOptionWrapper.getWidget()) {
// option.setDown(false);
// dropDownMenu.add(option);
// }
// }
// dropDownButton.setDown(true);
// isMenuShowed = true;
}
private void hideDropDownMenu() {
dropDownWrapper.hide();
dropDownButton.setDown(false);
isMenuShowed = false;
}
public void addOption(Image image, String text, ClickListener clickListener) {
OptionButton option = new OptionButton(image, text, clickListener);
options.add(option);
}
public void setSelectedIndex(int index) {
selectOption(options.get(index));
}
private class OptionButton extends ToggleButton {
public Image image;
public String text;
private OptionButton(Image image, String text, ClickListener clickListener) {
super(image);
setTitle(text);
addClickListener(clickListener);
addClickListener(defaultOptionClickListener);
}
}
public void setDown(boolean down) {
selectedElementButton.setDown(true);
// ((OptionButton) selectedOptionWrapper.getWidget()).setDown(down);
}
public void setUpAllToggle(Command upAllToggle) {
this.upAllToggle = upAllToggle;
}
}