/** * */ package org.sinnlabs.dbvim.ui; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.sinnlabs.dbvim.config.ConfigLoader; import org.sinnlabs.dbvim.menu.MenuResolverFactory; import org.sinnlabs.dbvim.model.CharacterMenu; import org.sinnlabs.dbvim.model.CharacterMenuItem; import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.WrongValueException; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.Events; import org.zkoss.zk.ui.select.Selectors; import org.zkoss.zk.ui.select.annotation.Listen; import org.zkoss.zk.ui.select.annotation.Wire; import org.zkoss.zul.Listbox; import org.zkoss.zul.Listcell; import org.zkoss.zul.Listitem; import org.zkoss.zul.Messagebox; import org.zkoss.zul.Textbox; import org.zkoss.zul.Window; /** * CharacterMenu properties dialog window * @author peter.liverovsky * */ public class CharacterMenuProperties extends Window { /** * */ private static final long serialVersionUID = -2193250248314874319L; /** * Cancel dialog action */ public static final int DD_CANCEL = 0; /** * Create or update connection */ public static final int DD_OK = 1; private int nSelectedAction = DD_CANCEL; private boolean isNew = false; protected CharacterMenu menu; @Wire protected Listbox lstItems; @Wire protected Textbox txtLabel; @Wire protected Textbox txtValue; @Wire protected Textbox txtName; /*Comparator for sorting the list by Student Name*/ public static Comparator<CharacterMenuItem> ItemComparator = new Comparator<CharacterMenuItem>() { public int compare(CharacterMenuItem s1, CharacterMenuItem s2) { //ascending order return s1.getOrder() - s2.getOrder(); //descending order //return StudentName2.compareTo(StudentName1); }}; /** * Creates character menu dialog instance * @param menu CharacterMenu to change or null for creating new menu */ public CharacterMenuProperties(CharacterMenu menu) { super(); // if menu is null then create a new menu instance if (menu == null) { menu = new CharacterMenu(); menu.setName("New CharacterMenu"); isNew = true; } this.menu = menu; // create the ui Executions .createComponents("/components/CharacterMenuProperties.zul", this, null); Selectors.wireVariables(this, this, null); Selectors.wireComponents(this, this, false); Selectors.wireEventListeners(this, this); setBorder("normal"); setClosable(true); setSizable(true); setMinheight(200); setMinwidth(220); setTitle("CharacterMenu properties"); // refresh items list refreshMenuItems(); txtName.setText(menu.getName()); } /** * Refreshes menu items list */ private void refreshMenuItems() { lstItems.getItems().clear(); List<CharacterMenuItem> items = new ArrayList<CharacterMenuItem>(); if (menu.getItems() != null) { for(CharacterMenuItem i : menu.getItems()) { items.add(i); } } // sort items by order Collections.sort(items, ItemComparator); for(CharacterMenuItem i : items) { Listitem item = new Listitem(); item.appendChild(new Listcell(i.getLabel())); item.appendChild(new Listcell(i.getValue())); item.setValue(i); lstItems.getItems().add(item); } } /** * Returns user selected action * @return DD_OK or DD_CANCEL */ public int getSelectedAction() { return nSelectedAction; } @Listen("onClick = #btnOK") public void btnOK_onClick() throws WrongValueException, SQLException { if (StringUtils.isBlank(txtName.getText())) { Messagebox.show("Name can not be empty."); return; } if (isNew && !MenuResolverFactory.isNenuNameAvailable(txtName.getText())) { Messagebox.show("Menu name is already taken."); return; } menu.setName(txtName.getText()); if (isNew) { ConfigLoader.getInstance().getCharacterMenu().create(menu); for(int i=0; i<lstItems.getItemCount(); i++) { CharacterMenuItem item = lstItems.getItems().get(i).getValue(); item.setOrder(i); ConfigLoader.getInstance().getCharacterMenuItems().create(item); } } else { // clear menu items menu.getItems().clear(); for(int i=0; i<lstItems.getItemCount(); i++) { CharacterMenuItem item = lstItems.getItems().get(i).getValue(); item.setOrder(i); menu.getItems().add(item); } ConfigLoader.getInstance().getCharacterMenu().update(menu); } nSelectedAction = DD_OK; Event closeEvent = new Event(Events.ON_CLOSE, this); Events.postEvent(closeEvent); detach(); } @Listen("onClick = #btnCancel") public void btnCancel_onClick() { nSelectedAction = DD_CANCEL; Event closeEvent = new Event(Events.ON_CLOSE, this); Events.postEvent(closeEvent); detach(); } @Listen("onClick = #btnAdd") public void btnAdd_Click() { CharacterMenuItem menuItem = new CharacterMenuItem(); menuItem.setLabel(txtLabel.getText()); menuItem.setValue(txtValue.getText()); menuItem.setMenu(menu); Listitem item = new Listitem(); item.setValue(menuItem); item.appendChild(new Listcell(menuItem.getLabel())); item.appendChild(new Listcell(menuItem.getValue())); lstItems.getItems().add(item); } @Listen("onClick = #btnDelete") public void btnDelete_onClick() { if (lstItems.getSelectedItem() != null) { lstItems.getItems().remove(lstItems.getSelectedItem()); } } @Listen("onClick = #btnUp") public void btnUp_onClick() { if (lstItems.getSelectedItem() != null) { int index = lstItems.getSelectedIndex(); Listitem item = lstItems.getSelectedItem(); index--; if (index >= 0) { lstItems.getItems().remove(item); lstItems.getItems().add(index, item); } } } @Listen("onClick = #btnDown") public void btnDown_onClick() { if (lstItems.getSelectedItem() != null) { int index = lstItems.getSelectedIndex(); if (index <lstItems.getItemCount()-1) { Listitem item = lstItems.getSelectedItem(); lstItems.getItems().remove(item); index++; lstItems.getItems().add(index, item); } } } }