* Implemented function key shortcut support for toolbar.

This commit is contained in:
Heng Sin Low 2008-07-22 03:22:45 +00:00
parent f4e44a99e4
commit b35f0c2701
7 changed files with 130 additions and 61 deletions

View File

@ -28,6 +28,9 @@ import java.util.logging.Level;
import org.adempiere.webui.apps.AEnv;
import org.adempiere.webui.apps.ProcessDialog;
import org.adempiere.webui.component.Button;
import org.adempiere.webui.component.Grid;
import org.adempiere.webui.component.Row;
import org.adempiere.webui.component.Rows;
import org.adempiere.webui.component.Tabpanel;
import org.adempiere.webui.component.ToolBarButton;
import org.adempiere.webui.component.Window;
@ -69,6 +72,7 @@ import org.zkoss.zul.Caption;
import org.zkoss.zul.Groupbox;
import org.zkoss.zul.Hbox;
import org.zkoss.zul.Iframe;
import org.zkoss.zul.Label;
import org.zkoss.zul.Separator;
import org.zkoss.zul.Vbox;
@ -112,7 +116,12 @@ public class Desktop extends AbstractUIPart implements MenuListener, Serializabl
layout = new Borderlayout();
if (parent != null)
{
layout.setParent(parent);
layout.setWidth("100%");
layout.setHeight("100%");
layout.setStyle("position: absolute");
}
else
layout.setPage(page);

View File

@ -20,7 +20,9 @@ package org.adempiere.webui.component;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.logging.Level;
import org.adempiere.webui.LayoutUtils;
@ -32,6 +34,7 @@ import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.event.KeyEvent;
import org.zkoss.zul.Label;
/**
@ -68,7 +71,9 @@ public class CWindowToolbar extends FToolbar implements EventListener
private ArrayList<ToolbarListener> listeners = new ArrayList<ToolbarListener>();
private Event event;
private Event event;
private Map<Integer, ToolBarButton> keyMap = new HashMap<Integer, ToolBarButton>();
public CWindowToolbar()
{
@ -261,6 +266,23 @@ private Event event;
btnZoomAcross.setDisabled(false);
btnActiveWorkflows.setDisabled(false); // Elaine 2008/07/17
configureKeyMap();
}
private void configureKeyMap() {
keyMap.put(KeyEvent.F1, btnHelp);
keyMap.put(KeyEvent.F2, btnNew);
keyMap.put(KeyEvent.F3, btnDelete);
keyMap.put(KeyEvent.F4, btnSave);
keyMap.put(KeyEvent.F5, btnRefresh);
keyMap.put(KeyEvent.F6, btnFind);
keyMap.put(KeyEvent.F7, btnAttachment);
keyMap.put(KeyEvent.F8, btnGridToggle);
keyMap.put(KeyEvent.F9, btnHistoryRecords);
keyMap.put(KeyEvent.F11, btnReport);
keyMap.put(KeyEvent.F12, btnPrint);
}
protected void addSeparator()
@ -287,15 +309,25 @@ private Event event;
String eventName = event.getName();
Component eventComp = event.getTarget();
Iterator<ToolbarListener> listenerIter = listeners.iterator();
if(eventName.equals(Events.ON_CLICK))
{
if(eventComp instanceof ToolBarButton)
if(event.getTarget() instanceof ToolBarButton)
{
doOnClick(event);
}
} else if (eventName.equals(Events.ON_CTRL_KEY))
{
KeyEvent keyEvent = (KeyEvent) event;
this.onCtrlKeyEvent(keyEvent.getKeyCode());
}
}
private void doOnClick(Event event) {
this.event = event;
ToolBarButton cComponent = (ToolBarButton) eventComp;
ToolBarButton cComponent = (ToolBarButton) event.getTarget();
String compName = cComponent.getName();
String methodName = "on" + compName.substring(3);
Iterator<ToolbarListener> listenerIter = listeners.iterator();
while(listenerIter.hasNext())
{
try
@ -327,8 +359,6 @@ private Event event;
}
this.event = null;
}
}
}
public void enableHistoryRecords(boolean enabled)
{
@ -460,4 +490,26 @@ private Event event;
{
return event;
}
public void onCtrlKeyEvent(int keycode) {
if (isRealVisible()) {
ToolBarButton btn = keyMap.get(keycode);
if (btn != null && !btn.isDisabled() && btn.isVisible()) {
Events.sendEvent(btn, new Event(Events.ON_CLICK, btn));
}
}
}
private boolean isRealVisible() {
if (!isVisible())
return false;
Component parent = this.getParent();
while (parent != null) {
if (!parent.isVisible())
return false;
parent = parent.getParent();
}
return true;
}
}

View File

@ -27,7 +27,6 @@ import org.compiere.model.GridTab;
import org.compiere.util.CLogger;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zul.Div;
/**
*
@ -45,7 +44,7 @@ public class CompositeADTab extends AbstractADTab
private List<ADTabListModel.ADTabLabel> tabLabelList = new ArrayList<ADTabListModel.ADTabLabel>();
private Div div;
private Window window;
protected ADButtonTabList tabList;
@ -57,20 +56,21 @@ public class CompositeADTab extends AbstractADTab
protected Component doCreatePart(Component parent)
{
div = new Div();
window = new Window();
if (parent != null) {
div.setParent(parent);
LayoutUtils.addSclass("adtab-body", div);
window.setParent(parent);
LayoutUtils.addSclass("adtab-body", window);
window.setContentSclass("adtab-body");
} else {
div.setPage(page);
window.setPage(page);
}
return div;
window.setCtrlKeys("#f1#f2#f3#f4#f5#f6#f7#f8#f9#f10#f11#f12");
return window;
}
@Override
protected void doAddTab(GridTab gTab, IADTabpanel tabPanel) {
tabPanel.setParent(div);
tabPanel.setParent(window);
tabPanel.setVisible(false);
ADTabListModel.ADTabLabel tabLabel = new ADTabListModel.ADTabLabel(gTab.getName(), gTab.getTabLevel());
@ -141,6 +141,6 @@ public class CompositeADTab extends AbstractADTab
}
public Component getComponent() {
return div;
return window;
}
}

View File

@ -18,8 +18,6 @@
package org.adempiere.webui.component;
import org.zkoss.zk.ui.WrongValueException;
import org.zkoss.zul.Constraint;
import org.zkoss.zul.SimpleConstraint;
/**
*

View File

@ -29,12 +29,14 @@ import org.adempiere.webui.component.Tabs;
import org.compiere.util.CLogger;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.HtmlBasedComponent;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zkex.zul.Borderlayout;
import org.zkoss.zkex.zul.Center;
import org.zkoss.zkex.zul.North;
import org.zkoss.zkex.zul.South;
import org.zkoss.zkex.zul.West;
import org.zkoss.zul.Tab;
import org.zkoss.zul.Window;
/**
*
@ -69,7 +71,7 @@ public class ADWindowPanel extends AbstractADWindowPanel
protected Component doCreatePart(Component parent)
{
layout = new Borderlayout();
if (layout != null) {
if (parent != null) {
layout.setParent(parent);
layout.setStyle("position:absolute");
layout.setHeight("100%");
@ -112,6 +114,11 @@ public class ADWindowPanel extends AbstractADWindowPanel
TabOnCloseHanlder handler = new TabOnCloseHanlder();
((Tabpanel)parent).setOnCloseHandler(handler);
}
if (adTab.getComponent() instanceof Window) {
Window w = (Window) adTab.getComponent();
w.addEventListener(Events.ON_CTRL_KEY, toolbar);
}
return layout;
}

View File

@ -16,6 +16,7 @@ public abstract class AbstractUIPart implements UIPart {
page = (Page)parent;
} else if (parent instanceof Component) {
component = (Component)parent;
page = component.getPage();
} else {
throw new IllegalArgumentException("Parent must of class Page or Component.");
}

View File

@ -188,11 +188,13 @@ tr.tab-desktop-tb-m {
padding: 0;
width: 100%;
height: 100%;
border: none;
}
.adtab-content {
margin: 0;
padding: 0;
border: none;
overflow: auto;
width: 100%;
height: 100%;