diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/AutoComplete.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/AutoComplete.java index 0cfc398293..c48fb34e89 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/AutoComplete.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/AutoComplete.java @@ -117,7 +117,7 @@ public class AutoComplete extends Combobox /** * Refresh comboitem based on the specified value. */ - private void refresh(String val) + public void refresh(String val) { if (comboItems == null || val == null) { super.getChildren().clear(); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/AbstractMenuPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/AbstractMenuPanel.java index d0b21a64b0..beb1894071 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/AbstractMenuPanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/AbstractMenuPanel.java @@ -255,11 +255,11 @@ public abstract class AbstractMenuPanel extends Panel implements EventListener() { + @Override + public void onEvent(Event event) throws Exception { + newBtn.setDisabled(true); + newBtn.setSclass("menu-search-toggle-on"); + isNew = true; + openBtn.setDisabled(false); + openBtn.setSclass("menu-search-toggle-off"); + refreshAutoComplete(); + } + }); + newBtn.setTooltiptext(Util.cleanAmp(Msg.getMsg(Env.getCtx(), "New"))); + + openBtn = new Toolbarbutton(); + openBtn.setImage("/images/Open16.png"); + openBtn.setSclass("menu-search-toggle-on"); + openBtn.setDisabled(true); + openBtn.addEventListener(Events.ON_CLICK, new EventListener() { + @Override + public void onEvent(Event event) throws Exception { + openBtn.setDisabled(true); + openBtn.setSclass("menu-search-toggle-on"); + isNew = false; + newBtn.setDisabled(false); + newBtn.setSclass("menu-search-toggle-off"); + refreshAutoComplete(); + } + }); + openBtn.setTooltiptext(Util.cleanAmp(Msg.getMsg(Env.getCtx(), "Open"))); + + hlayout.appendChild(newBtn); + hlayout.appendChild(openBtn); + + layout.insertBefore(hlayout, layout.getFirstChild()); + } + + @Override + public void refreshSearchList() { + treeNodeItemMap.clear(); + if (tree.getModel() == null) { + TreeUtils.traverse(tree, new TreeItemAction() { + public void run(Treeitem treeItem) { + if (treeItem.isVisible()) + addTreeItem(treeItem); + } + }); + } else { + TreeUtils.traverse(tree.getModel(), new TreeNodeAction() { + public void run(DefaultTreeNode treeNode) { + addTreeItem(treeNode); + } + }); + } + + refreshAutoComplete(); + } + + private void refreshAutoComplete() { + List valueList = new ArrayList(); + List descriptionList = new ArrayList(); + List imageList = new ArrayList(); + + for (Object value : treeNodeItemMap.values()) + { + if (value instanceof Treeitem) + { + Treeitem treeItem = (Treeitem) value; + if (isFolder(treeItem)) + continue; + + if (isNew) { + if (!"window".equals(treeItem.getAttribute("menu.type"))) { + continue; + } + } + + valueList.add(getLabel(treeItem)); + descriptionList.add(treeItem.getTooltiptext()); + String image = getImage(treeItem); + if (image == null || image.length() == 0) + { + image = "/images/Folder16.png"; + } + imageList.add(image); + } + else if (value instanceof DefaultTreeNode) + { + DefaultTreeNode sNode = (DefaultTreeNode) value; + MTreeNode mNode = (MTreeNode) sNode.getData(); + if (!mNode.isLeaf()) + continue; + + if (isNew) { + if (!mNode.isWindow()) { + continue; + } + } + + valueList.add(mNode.getName()); + descriptionList.add(mNode.getDescription()); + imageList.add(mNode.getImagePath()); + } + } + + treeDescription = descriptionList.toArray(new String[0]); + treeValues = valueList.toArray(new String[0]); + treeImages = imageList.toArray(new String[0]); + + cmbSearch.setDescription(treeDescription); + cmbSearch.setDict(treeValues); + cmbSearch.setImages(treeImages); + cmbSearch.refresh(""); + } + + @Override + protected void onPostSelectTreeitem() { + Clients.clearBusy(); + Event event = null; + if (eventToFire.equals(Events.ON_CLICK)) + { + if (tree.getSelectedItem().getTreerow().getFirstChild().getFirstChild() instanceof A) + { + event = new Event(Events.ON_CLICK, tree.getSelectedItem().getTreerow().getFirstChild().getFirstChild(), isNew); + } + else + { + event = new Event(Events.ON_CLICK, tree.getSelectedItem().getTreerow(), isNew); + } + } + else + event = new Event(eventToFire, tree, isNew); + Events.postEvent(event); + Events.echoEvent(ON_POST_FIRE_TREE_EVENT, this, null); + } +} diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/TreeSearchPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/TreeSearchPanel.java index e99498a14a..f3873c0c63 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/TreeSearchPanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/TreeSearchPanel.java @@ -63,27 +63,28 @@ public class TreeSearchPanel extends Panel implements EventListener, Tree { private static final String ON_COMBO_SELECT_ECHO_EVENT = "onComboSelectEcho"; private static final String ON_POST_SELECT_TREEITEM_EVENT = "onPostSelectTreeitem"; - private static final String ON_POST_FIRE_TREE_EVENT = "onPostFireTreeEvent"; + protected static final String ON_POST_FIRE_TREE_EVENT = "onPostFireTreeEvent"; /** * */ private static final long serialVersionUID = 3478451169922775667L; - private TreeMap treeNodeItemMap = new TreeMap(); - private String[] treeValues; - private String[] treeDescription; - private String[] treeImages; + protected TreeMap treeNodeItemMap = new TreeMap(); + protected String[] treeValues; + protected String[] treeDescription; + protected String[] treeImages; private Label lblSearch; protected AutoComplete cmbSearch; - private Tree tree; + protected Tree tree; - private String eventToFire; + protected String eventToFire; @SuppressWarnings("unused") private int m_windowno = 0; @SuppressWarnings("unused") private int m_tabno = 0; private Treeitem selectedItem; + protected Hlayout layout; private static final String PREFIX_DOCUMENT_SEARCH = "/"; @@ -128,10 +129,10 @@ public class TreeSearchPanel extends Panel implements EventListener, Tree + "var evt = new zk.Event(panel, 'onComboSelectEcho', [comboitem.uuid, popupheight], {toServer: true});" + "zAu.send(evt);"; - private void init() + protected void init() { - Hlayout hLayout = new Hlayout(); - hLayout.setValign("middle"); + layout = new Hlayout(); + layout.setValign("middle"); lblSearch = new Label(); lblSearch.setValue(Msg.getMsg(Env.getCtx(),"TreeSearch").replaceAll("&", "") + ":"); lblSearch.setTooltiptext(Msg.getMsg(Env.getCtx(),"TreeSearchText")); @@ -164,20 +165,20 @@ public class TreeSearchPanel extends Panel implements EventListener, Tree cmbSearch.setWidth("200px"); } - hLayout.appendChild(lblSearch); - hLayout.appendChild(cmbSearch); - this.appendChild(hLayout); + layout.appendChild(lblSearch); + layout.appendChild(cmbSearch); + this.appendChild(layout); addEventListener(ON_POST_FIRE_TREE_EVENT, this); } - private void addTreeItem(Treeitem treeItem) + protected void addTreeItem(Treeitem treeItem) { String key = getLabel(treeItem); treeNodeItemMap.put(key, treeItem); } - private void addTreeItem(DefaultTreeNode node) { + protected void addTreeItem(DefaultTreeNode node) { Object data = node.getData(); if (data instanceof MTreeNode) { MTreeNode mNode = (MTreeNode) data; @@ -250,7 +251,7 @@ public class TreeSearchPanel extends Panel implements EventListener, Tree cmbSearch.setImages(treeImages); } - private boolean isFolder(Treeitem treeItem) { + protected boolean isFolder(Treeitem treeItem) { List list = treeItem.getChildren(); for (Component c : list) { if (c instanceof Treechildren && ((Treechildren)c).getChildren().size() > 1) { @@ -260,7 +261,7 @@ public class TreeSearchPanel extends Panel implements EventListener, Tree return false; } - private String getLabel(Treeitem treeItem) { + protected String getLabel(Treeitem treeItem) { String label = treeItem.getLabel(); if (label == null || label.trim().length() == 0) { @@ -274,7 +275,7 @@ public class TreeSearchPanel extends Panel implements EventListener, Tree return label; } - private String getImage(Treeitem treeItem) { + protected String getImage(Treeitem treeItem) { String image = treeItem.getImage(); if (image == null || image.trim().length() == 0) { @@ -378,7 +379,7 @@ public class TreeSearchPanel extends Panel implements EventListener, Tree } } - private void onPostSelectTreeitem() { + protected void onPostSelectTreeitem() { Clients.clearBusy(); Event event = null; if (eventToFire.equals(Events.ON_CLICK)) diff --git a/org.adempiere.ui.zk/theme/default/css/theme.css.dsp b/org.adempiere.ui.zk/theme/default/css/theme.css.dsp index df1ad3b09b..4f8980b53e 100644 --- a/org.adempiere.ui.zk/theme/default/css/theme.css.dsp +++ b/org.adempiere.ui.zk/theme/default/css/theme.css.dsp @@ -1220,4 +1220,24 @@ tbody.z-grid-empty-body td { font-weight: normal; } -. \ No newline at end of file +.menu-search-toggle-box { + display: inline-block; + border: 1px solid #ababab; +} + +.menu-search-toggle-box .z-toolbarbutton-over { + border: none; +} + +.menu-search-toggle-off { + margin:0px; + padding: 1px 4px 1px 4px; +} + +.menu-search-toggle-on { + background: #999999; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; + margin:0px; + padding: 1px 4px 1px 4px; +}