IDEMPIERE-1794 Implement search box on Tree Maintenance / integrate and peer review patch from Sergio Oropeza

This commit is contained in:
Carlos Ruiz 2014-03-07 22:38:04 -05:00
parent 5583a606c2
commit 98850a7e39
1 changed files with 55 additions and 23 deletions

View File

@ -16,8 +16,10 @@
*****************************************************************************/ *****************************************************************************/
package org.adempiere.webui.apps.form; package org.adempiere.webui.apps.form;
import java.text.Normalizer;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.regex.Pattern;
import org.adempiere.util.Callback; import org.adempiere.util.Callback;
import org.adempiere.webui.LayoutUtils; import org.adempiere.webui.LayoutUtils;
@ -26,6 +28,7 @@ import org.adempiere.webui.component.Checkbox;
import org.adempiere.webui.component.Label; import org.adempiere.webui.component.Label;
import org.adempiere.webui.component.Listbox; import org.adempiere.webui.component.Listbox;
import org.adempiere.webui.component.Panel; import org.adempiere.webui.component.Panel;
import org.adempiere.webui.component.Searchbox;
import org.adempiere.webui.component.SimpleListModel; import org.adempiere.webui.component.SimpleListModel;
import org.adempiere.webui.component.SimpleTreeModel; import org.adempiere.webui.component.SimpleTreeModel;
import org.adempiere.webui.panel.ADForm; import org.adempiere.webui.panel.ADForm;
@ -47,6 +50,7 @@ import org.zkoss.zul.Borderlayout;
import org.zkoss.zul.Cell; import org.zkoss.zul.Cell;
import org.zkoss.zul.Center; import org.zkoss.zul.Center;
import org.zkoss.zul.DefaultTreeNode; import org.zkoss.zul.DefaultTreeNode;
import org.zkoss.zul.Div;
import org.zkoss.zul.East; import org.zkoss.zul.East;
import org.zkoss.zul.Hbox; import org.zkoss.zul.Hbox;
import org.zkoss.zul.ListModel; import org.zkoss.zul.ListModel;
@ -61,17 +65,11 @@ import org.zkoss.zul.Treeitem;
/** /**
* Tree Maintenance * Tree Maintenance
* *
* @author Jorg Janke * @author Jorg Janke (modify: Sergio Oropeza sergioropeza@gmail.com, soropeza@dcsla.com 06/03/2014)
* @version $Id: VTreeMaintenance.java,v 1.3 2006/07/30 00:51:28 jjanke Exp $ * @version $Id: VTreeMaintenance.java,v 1.3 2006/07/30 00:51:28 jjanke Exp $
*/ */
public class WTreeMaintenance extends TreeMaintenance implements IFormController, EventListener<Event> public class WTreeMaintenance extends TreeMaintenance implements IFormController, EventListener<Event>
{ {
/**
*
*/
@SuppressWarnings("unused")
private static final long serialVersionUID = 3630156132596215136L;
private CustomForm form = new CustomForm(); private CustomForm form = new CustomForm();
private Borderlayout mainLayout = new Borderlayout (); private Borderlayout mainLayout = new Borderlayout ();
@ -84,6 +82,7 @@ public class WTreeMaintenance extends TreeMaintenance implements IFormController
private Button bDeleteAll = new Button (); private Button bDeleteAll = new Button ();
private Checkbox cbAllNodes = new Checkbox (); private Checkbox cbAllNodes = new Checkbox ();
private Label treeInfo = new Label (); private Label treeInfo = new Label ();
private Searchbox searchBox = new Searchbox();
// //
@SuppressWarnings("unused") @SuppressWarnings("unused")
private Splitter splitPane = new Splitter(); private Splitter splitPane = new Splitter();
@ -156,6 +155,8 @@ public class WTreeMaintenance extends TreeMaintenance implements IFormController
North north = new North(); North north = new North();
mainLayout.appendChild(north); mainLayout.appendChild(north);
north.appendChild(northPanel); north.appendChild(northPanel);
north.setHflex("1");
north.setVflex("1");
northPanel.setWidth("100%"); northPanel.setWidth("100%");
// //
Hbox hbox = new Hbox(); Hbox hbox = new Hbox();
@ -177,10 +178,20 @@ public class WTreeMaintenance extends TreeMaintenance implements IFormController
cell.appendChild(treeInfo); cell.appendChild(treeInfo);
hbox.appendChild (cell); hbox.appendChild (cell);
hbox.appendChild (new Space()); hbox.appendChild (new Space());
hbox.appendChild (bAddAll);
hbox.appendChild (bAdd); Div div = new Div();
hbox.appendChild (bDelete); div.appendChild (bAddAll);
hbox.appendChild (bDeleteAll); div.appendChild (bAdd);
div.appendChild (bDelete);
div.appendChild (bDeleteAll);
searchBox.addEventListener(Events.ON_CLICK, this);
searchBox.getTextbox().addEventListener(Events.ON_OK, this);
searchBox.getButton().setImage(ThemeManager.getThemeResource("images/Find16.png"));
searchBox.setToolTipText(Msg.getCleanMsg(Env.getCtx(), "TreeSearch"));
searchBox.setWidth("200px");
div.appendChild(searchBox);
hbox.appendChild(div);
// //
Center center = new Center(); Center center = new Center();
mainLayout.appendChild(center); mainLayout.appendChild(center);
@ -244,13 +255,32 @@ public class WTreeMaintenance extends TreeMaintenance implements IFormController
onListSelection(e); onListSelection(e);
else if (e.getTarget() == centerTree) else if (e.getTarget() == centerTree)
onTreeSelection(e); onTreeSelection(e);
else if (e.getTarget() == searchBox.getButton() || e.getTarget() == searchBox.getTextbox())
searchElement();
} // actionPerformed } // actionPerformed
private void searchElement() {
String filter = searchBox.getText() == null ? "" : searchBox.getText();
filter = deleteAccents(filter.trim().toUpperCase());
action_loadTree(filter);
}
private String deleteAccents(String text) {
String nfdNormalizedString = Normalizer.normalize(text, Normalizer.Form.NFD);
Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
text = pattern.matcher(nfdNormalizedString).replaceAll("");
return text;
}
private void action_loadTree() {
action_loadTree(null);
}
/** /**
* Action: Fill Tree with all nodes * Action: Fill Tree with all nodes
* @param filter
*/ */
private void action_loadTree() private void action_loadTree(String filter)
{ {
KeyNamePair tree = treeField.getSelectedItem().toKeyNamePair(); KeyNamePair tree = treeField.getSelectedItem().toKeyNamePair();
log.info("Tree=" + tree); log.info("Tree=" + tree);
@ -268,16 +298,16 @@ public class WTreeMaintenance extends TreeMaintenance implements IFormController
bAdd.setEnabled(!m_tree.isAllNodes()); bAdd.setEnabled(!m_tree.isAllNodes());
bDelete.setEnabled(!m_tree.isAllNodes()); bDelete.setEnabled(!m_tree.isAllNodes());
bDeleteAll.setEnabled(!m_tree.isAllNodes()); bDeleteAll.setEnabled(!m_tree.isAllNodes());
//
/*String fromClause = m_tree.getSourceTableName(false); // fully qualified
String columnNameX = m_tree.getSourceTableName(true);
String actionColor = m_tree.getActionColorName();*/
// List // List
SimpleListModel model = new SimpleListModel(); SimpleListModel model = new SimpleListModel();
ArrayList<ListItem> items = getTreeItemData(); ArrayList<ListItem> items = getTreeItemData();
for(ListItem item : items) for (ListItem item : items) {
String valueItem = item.toString() == null ? "" : deleteAccents(item.toString().toUpperCase());
if (filter == null || filter.length() == 0 || valueItem.contains(filter)) {
model.addElement(item); model.addElement(item);
}
}
if (log.isLoggable(Level.CONFIG)) log.config("#" + model.getSize()); if (log.isLoggable(Level.CONFIG)) log.config("#" + model.getSize());
centerList.setItemRenderer(model); centerList.setItemRenderer(model);
@ -342,14 +372,16 @@ public class WTreeMaintenance extends TreeMaintenance implements IFormController
log.info(tn.toString()); log.info(tn.toString());
ListModel<Object> model = centerList.getModel(); ListModel<Object> model = centerList.getModel();
int size = model.getSize(); int size = model.getSize();
int index = -1; int found = -1;
for (index = 0; index < size; index++) for (int index = 0; index < size; index++)
{ {
ListItem item = (ListItem)model.getElementAt(index); ListItem item = (ListItem)model.getElementAt(index);
if (item.id == tn.getNode_ID()) if (item.id == tn.getNode_ID()) {
found = index;
break; break;
} }
centerList.setSelectedIndex(index); }
centerList.setSelectedIndex(found);
} // propertyChange } // propertyChange
/** /**