IDEMPIERE-1794 Implement search box on Tree Maintenance / integrate and peer review patch from Sergio Oropeza
This commit is contained in:
parent
5583a606c2
commit
98850a7e39
|
@ -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
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue