增加快捷功能需求
这里的快捷功能的操作类和图标名称等,都是注册在sm_custom_appext表中的
如果是打开一个功能节点,具体的操作类实现,可以参考FlowPreserveAppAction
完整源码如下:
package nc.ui.pub.appaction;
import java.awt.Component;
import java.awt.Container;
import javax.swing.JPanel;
import nc.bs.logging.Logger;
import nc.desktop.ui.WorkbenchEnvironment;
import nc.desktop.ui.iconpanel.IDesktopAppAction;
import nc.funcnode.ui.FuncletInitData;
import nc.funcnode.ui.FuncletWidgetContainer;
import nc.funcnode.ui.FuncletWidgetContainerFactory;
import nc.ui.ml.NCLangRes;
import nc.ui.pub.beans.ExtTabbedPane;
import nc.ui.sm.flowdesktop.FlowNaviPanel;
import nc.vo.pub.lang.UFBoolean;
import nc.vo.sm.funcreg.FuncRegisterVO;
public class FlowPreserveAppAction implements IDesktopAppAction {
private String TITLE = NCLangRes.getInstance().getStrByID(
"myflowcenter", "FlowNavi-000001"); /* 流程导航 */
private final static String FUNCODE = "flownavigation";
private final static String OWN_MODULE = "10";
private final static String CLASS_NAME = "nc.ui.sm.flowdesktop.FlowNaviPanel";
private ExtTabbedPane extTab = null;
private FlowNaviPanel flowNaviPanel = null;
@Override
public void actionPerformed(Container parent) {
int panelIndex = isAlreadyOpen();
if (panelIndex >= 0) { // 已打开
getExtTab().setSelectedIndex(panelIndex);
} else { // 未打开
JPanel panel = null;
try {
// 创建虚拟节点容器
panel = FuncletWidgetContainerFactory
.createFuncletWidgetContainer(createMsgFuncVO(),
createInitData(), null);
} catch (Exception e) {
Logger.error(e.getMessage(), e);
// 若创建虚拟节点容器失败,则采用普通Panel方式打开
panel = getFlowNaviPanel();
}
int count = getExtTab().getTabCount();
getExtTab().insertTab(TITLE, null, panel, TITLE, count, true);
getExtTab().setSelectedIndex(count);
}
}
public ExtTabbedPane getExtTab() {
if (extTab == null) {
extTab = WorkbenchEnvironment.getInstance().getWorkbench()
.getWorkSpaceTabbedPane();
}
return extTab;
}
private FlowNaviPanel getFlowNaviPanel() {
if (flowNaviPanel == null) {
flowNaviPanel = new FlowNaviPanel(true);
}
return flowNaviPanel;
}
/**
* 创建虚拟节点
*
* @return
*/
private FuncRegisterVO createMsgFuncVO() {
FuncRegisterVO frvo = new FuncRegisterVO();
frvo.setFuncode(FUNCODE);
frvo.setOwn_module(OWN_MODULE);
frvo.setIsbuttonpower(UFBoolean.FALSE);
frvo.setClass_name(CLASS_NAME);
return frvo;
}
/**
* 创建虚拟节点
*
* @return
*/
private FuncletInitData createInitData() {
FuncletInitData initdata = new FuncletInitData();
return initdata;
}
/**
* 判断流程导航是否已经被打开
*
* @return index if opened, or -1 if not opened
*/
private int isAlreadyOpen() {
int count = getExtTab().getTabCount();
FuncletWidgetContainer widget = null;
for (int i = 0; i < count; i++) {
Component c = getExtTab().getComponentAt(i);
// 针对打开流程导航时可能采用的两种方式(虚拟节点、普通JPanel)
// 此处应对两种方式都进行判断
if (c instanceof FuncletWidgetContainer) {
widget = (FuncletWidgetContainer) c;
if (widget.getFuncRegisterVO().getFuncode().equals(FUNCODE)) {
return i;
}
} else if (c instanceof FlowNaviPanel) {
return i;
}
}
return -1;
}
}
其他操作也一样,但确保的是必须要实现IDesktopAppAction接口