自定义菜单

阅读(745) 标签: 添加菜单,

用户通过报表提供的接口动态的定制报表设计器中的菜单,通过定制的菜单在报表设计器中实现用户自定义的功能,例如远程服务。

菜单的定制包括三样内容:1、写程序实现菜单的功能2、增加菜单按钮 3、如果自定义菜单是在远程服务中使用

实例请参考API实例 / 自定义类 / 自定义菜单

下面我们按顺序介绍这三个步骤:

编程实现菜单功能

菜单要实现的功能由程序员自己编程实现,所有的功能通过继承CMAction抽象类来实现。

 

l  com.raqsoft.report.ide.configmenu.CMAction

对于该抽象类用户唯一要实现的方法就是

public void actionPerformed(ActionEvent e) {}

即菜单执行时要真正干什么活。

该类有两个保护变量:

  protected String argument;

  protected ICMHandler handler;

argument  即在配置菜单按钮时配置文件指定的argument字符串

handler  ICMHandler,这是一个润乾报表提供的消息处理类,程序员可以通过这个接口发送消息以获取到自己想得到的一些东西。关于这个类所处理的消息在下一小节说明。

 

l  com.raqsoft.report.ide.configmenu.ICMHandler

public Object processMessage(String desc, Object argument);

desc  消息的简短描述

argument 传给润乾报表的参数

返回值 润乾报表执行消息后返回给程序员的想要得到的对象

 

目前支持的参数简介:

  参数

功能

Desc

Argument

返回值

让主程序打开报表

“HttpOpen”

HashMap对象:有两个键值

1“Stream”=InputStream

要打开的流报表

2“FileName”=String

要打开的报表名称

JInternalFrame

同上

“setRaqInputStream”

同上

同上

要保存报表时从主程序获取当前编辑的报表对象

“HttpSave”

Null

com.raqsoft.report.usermodel.IReport接口

同上

“getReport”

同上

同上

获取IDE主窗口

"getParentFrame"

Null

JFrame对象

获取当前编辑的报表名称

"getFileName"

Null

String对象

获取当前编辑的报表流

"getRaqInputStream"

Null

InputStream对象

 

另外:com.raqsoft.report.ide.GVIde是一静态类,里面包含了IDE的组成构件,用户可以直接访问该类的属性以获取自己感兴趣的IDE构件。

 

可以访问的构件说明:

1、  appFrameIDE应用程序的主窗口,该窗口的值只可能是com.raqsoft.report.ide. RPX,类型(JFrame

补充:com.raqsoft.report.ide.FrameMain.jSPMain :设计器主窗口的分栏面板。类型(JSplitPane

 

2、  appMenu :设计器的主菜单对象。类型(JMenu

3、  dsActive :当前活动的数据源定义,类型(com.raqsoft.report.ide.base.DataSource

4、  dsModel :数据源列表定义,类型(com.raqsoft.report.ide.base.DataSourceListModel

5、  toolBarProperty :设计器第一个工具条,可设置颜色的那条。类型(com.raqsoft.report.ide.ToolBarProperty

6、  toolBarEditor 设计其第二个工具条,可设置表达式的那条,类型(com.raqsoft.report.ide.ToolBarEditor

 

增加菜单按钮

自定义菜单的配置文件名为reportsystemconfig_zh.xml,该文件同时也是系统数据源等一些其它系统信息的配置文件,该文件在report\config目录下。

l  reportsystemconfig_zh.xml文件结构

<?xml version="1.0" encoding="GB2312"?>

<REPORT>

<CONFIG_MENU>

<F_10 argument="http://192.168.0.27:7070/ raqFileServer"

classname="one.client.OneHttpOpenRpx" text="打开" hotkey="ctrl+h"/>

<F_20002 argument="http://192.168.0.27:7070/ raqFileServer"

classname="example.client.HttpSaveRpx" text="保存为HTTP报表" hotkey="T"/>

</CONFIG_MENU>

<CONFIG splashfile="/runqiansplash.jpg">

</CONFIG>

</REPORT>

 

上述内容中,<CONFIG_MENU></CONFIG_MENU>节点间为自定义菜单的配置,详细说明如下:

 

F_10为菜单项的数字标识号,

F_ 前缀表示菜单将添加到润乾报表的文件菜单中;

 

后面跟的序号原则上大于 20000。但是如果小于20000而和系统的其他命令冲突则会造成程序菜单混乱。但是和以下的系统菜单序号相同时,则程序不追加新的配置菜单项,而会把如下列出的系统菜单的行为重定向到配置菜单指定的操作。

 

l  可替换的系统菜单命令列表

文件

NEW〔新建〕

5

OPEN〔打开〕

10

QUICKOPEN〔快速打开〕

15

SAVE〔保存〕

20

SAVEAS〔另存为〕

25

CLOSE〔关闭〕

30

CLOSE_ALL〔关闭全部〕

35

PRINT〔打印〕

50

PREVIEW〔预览〕

55

QUIT〔退出〕

60

 

Argument 为任意意义的字符串参数,用户在自定义的类里面可以使用该参数,当然也可以不用。

Classname 增加的菜单项需要执行的类名, 且该类必须实现com.raqsoft.report.ide.configmenu.CMAction抽象类。

Text  菜单显示的中文名称

Hotkey 为菜单项指定热键,只能为某个字母,或者 ctrl+字母  两种格式。

 

CONFIG 系统的配置选项:

Splahfile IDE启动时的splash 画面文件。该文件为类路径上搜索的相对路径。

不指定该选项则不启动splash窗口。

将实现菜单功能的相关类进行部署

将上述实现的自定义菜单类OneHttpOpenRaq.class以及自定义菜单的配置文件reportsystemconfig_zh.xml,按照文档的介绍,在设计器中进行部署

 

其中:

reportsystemconfig_zh.xml需要放在config目录下。

OneHttpOpenRaq.class按照JAVA标准的jar包的目录规则存放。

runqiansplash.jpg根据在reportsystemconfig_zh.xml的目录存放,例子是指定放在config目录下的。

自动控制设计器菜单栏和工具栏

在实际应用中,可能有些菜单项对于用户来说用不上,又或许是希望有些客户不能对某些菜单项进行操作,那么就可以对设计器的某些菜单栏和工具栏进行是否可见控制。

菜单栏和工具栏的自动控制功能由程序员自己编程实现,所有的菜单项都通过GCMenu获取对应的菜单项。

代码例子:

FrameMain mainFram = FrameMain.main0(args);

//设置菜单的可视

MenuMain  menu = (MenuMain)GVIde.appMenu;

JMenuItem menuiNEW= menu.getMenuItem(GCMenu.iNEW);

menuiNEW.setVisible(false);

………     

//设置工具栏的可视

ToolBarProperty topBar = (ToolBarProperty)GVIde.toolBarProperty;

JComponent comp = topBar.getButtonComponent(GCMenu.iNEW);

comp.setVisible(false);

comp = topBar.getButtonComponent(GCToolBar.iBOLD);

comp.setVisible(false);

……….

mainFram.setVisible(true);

mainFram.startAutoRecent();

FrameMain.startAutoLogin();

 

从上面的代码例子可以看出来,我们可以通过GCMenu类里i开头的项获取相应的菜单项比如GCMenu.iNEW

package com.raqsoft.report.ide.base;

 

import com.raqsoft.report.base.tool.GC;

import com.raqsoft.report.base.tool.GM;

import com.raqsoft.report.view.ReportExporter;

 

public class GCMenu {

// 文件

public static final String FILE = "file";

 

public static final String NEW = "file.new";

public static final String NEW_WIZARD = "file.newwizard";

public static final String NEWGROUP = "file.newgroup";

public static final String NEWINPUT = "file.newinput";

public static final String OPEN = "file.open";

public static final String OPENINPUT = "file.openinput"; 

public static final String QUICKOPEN = "file.quickopen";

public static final String SAVE = "file.save";

public static final String SAVEAS = "file.saveas";

public static final String CLOSE = "file.close";

public static final String CLOSE_ALL = "file.closeall";

public static final String PRINT = "file.print";

public static final String PREVIEW = "file.preview";

public static final String QUIT = "file.quit";

public static final short iNEW = 5;

public static final short iNEW_WIZARD = 6; 

public static final short iNEWGROUP = 7;

public static final short iNEWINPUT = 9;

public static final short iOPEN = 10;

public static final short iOPENINPUT = 11; 

public static final short iQUICKOPEN = 15;

public static final short iSAVE = 20;

public static final short iSAVEAS = 25;

public static final short iCLOSE = 30;

public static final short iCLOSE_ALL = 35;

public static final short iPRINT = 50;

public static final short iPREVIEW = 55;

public static final short iQUIT = 60;

 

// 增加下面Id,使用用户能hide最近菜单项

public static final short iRECENT_FILE = 97;

public static final short iRECENT_CONN = 98;

// 导出

public static final String EXPORT = "file.export";

 

public static final String EXPORT_EXCEL = "file.export.excel";

public static final String EXPORT_EXCEL_PAGE = "file.export.excelPage";

public static final String EXPORT_EXCEL_FORMULA = "file.export.excelFormula";

public static final String EXPORT_WORD = "file.export.word";

public static final String EXPORT_PDF = "file.export.pdf";

public static final String EXPORT_PDF_PAGE = "file.export.pdfPage";

public static final String EXPORT_PDF_ANAMORPHIC = "file.export.pdfAnamorphic";

public static final String EXPORT_PDF_PAGE_ANAMORPHIC = "file.export.pdfPageAnamorphic";

public static final String EXPORT_TEXT = "file.export.text";

public static final String EXPORT_XML = "file.export.xml";

public static final String RECENT_FILES = "file.recentFiles";

public static final String RECENT_CONNS = "file.recentConns";

public static final String EXPORT_HTML = "file.export.html";

public static final String EXPORT_PAJ = "file.export.paj";

public static final String EXPORT_EXCEL_OPENXML = "file.export.excel_openxml";

public static final String EXPORT_EXCEL_OPENXML_PAGE = "file.export.excel_openxml_Page";

public static final String EXPORT_EXCEL_OPENXML_FORMULA = "file.export.excel_openxml_Formula";

 

public static final String EXPORT2007 = "file.export2007";

 

public static final short iEXPORT = 100;

public static final short iEXPORT_EXCEL = iEXPORT + ReportExporter.EXPORT_EXCEL;

public static final short iEXPORT_EXCEL_PAGE = iEXPORT + ReportExporter.EXPORT_EXCEL_PAGE;

public static final short iEXPORT_EXCEL_FORMULA = iEXPORT + ReportExporter.EXPORT_EXCEL_FORMULA;

public static final short iEXPORT_WORD_OPENXML = iEXPORT + ReportExporter.EXPORT_WORD_OPENXML;

public static final short iEXPORT_PDF = iEXPORT + ReportExporter.EXPORT_PDF;

public static final short iEXPORT_PDF_PAGE = iEXPORT + ReportExporter.EXPORT_PDF_PAGE;

public static final short iEXPORT_PDF_ANAMORPHIC = iEXPORT + ReportExporter.EXPORT_PDF_ANAMORPHIC;

public static final short iEXPORT_PDF_PAGE_ANAMORPHIC = iEXPORT + ReportExporter.EXPORT_PDF_PAGE_ANAMORPHIC;

public static final short iEXPORT_TEXT = iEXPORT + ReportExporter.EXPORT_TEXT;

public static final short iEXPORT_XML = iEXPORT + ReportExporter.EXPORT_XML;

public static final short iEXPORT_HTML = iEXPORT + ReportExporter.EXPORT_HTML;

public static final short iEXPORT_EXCEL2007 = iEXPORT + ReportExporter.EXPORT_EXCEL2007;

public static final short iEXPORT_EXCEL_PAGE2007 = iEXPORT + ReportExporter.EXPORT_EXCEL_PAGE2007;

public static final short iEXPORT_EXCEL_FORMULA2007 = iEXPORT + ReportExporter.EXPORT_EXCEL_FORMULA2007;

public static final short iEXPORT_EXCEL_OPENXML = iEXPORT + ReportExporter.EXPORT_EXCEL_OPENXML;

public static final short iEXPORT_EXCEL_OPENXML_PAGE = iEXPORT + ReportExporter.EXPORT_EXCEL_OPENXML_PAGE;

public static final short iEXPORT_EXCEL_OPENXML_FORMULA = iEXPORT + ReportExporter.EXPORT_EXCEL_OPENXML_FORMULA;

// 编辑

public static final String EDIT = "edit";

 

public static final String UNDO = "edit.undo";

public static final String REDO = "edit.redo";

public static final String CUT = "edit.cut";

public static final String COPY = "edit.copy";

public static final String PASTE = "edit.paste";

public static final String DELETE_CELL = "edit.delete";

public static final String CLEAR_ALL = "edit.clearAll";

public static final String CLEAR_FORMAT = "edit.clearFormat";

public static final String CLEAR_CONTENT = "edit.clearContent";

public static final String CLEAR_INPUT = "edit.clearInput";

public static final String SEARCH = "edit.search";

public static final String REPLACE = "edit.replace";

 

public static final short iUNDO = 205;

public static final short iREDO = 210;

public static final short iCUT = 215;

public static final short iCOPY = 220;

public static final short iPASTE = 225;

public static final short iDELETE_CELL = 230;

public static final short iCLEAR_ALL = 235;

public static final short iCLEAR_FORMAT = 240;

public static final short iCLEAR_CONTENT = 245;

public static final short iCLEAR_INPUT = 246;

public static final short iSEARCH = 250;

public static final short iREPLACE = 255;

 

public static final String DELETE = "delete";

 

public static final String REMOVE_ROW = "edit.removerow";

public static final String REMOVE_COL = "edit.removecol";

public static final String REMOVE_LEFT_CELL = "edit.deleteleftcell";

 

public static final short iREMOVE_ROW = 261;

public static final short iREMOVE_COL = 263;

public static final short iREMOVE_LEFT_CELL = 265;

 

public static final String CLEAR = "clear";

 

// 属性

public static final String PROPERTY = "property";

 

public static final String PROPERTY_ROW = "property.row";

public static final String PROPERTY_COL = "property.col";

public static final String PROPERTY_CEL_BORDER = "property.celBorder";

public static final String PROPERTY_CEL_DATATYPE = "property.celDatatype";

public static final String PROPERTY_GRAPH = "property.graph";

public static final String PROPERTY_CEL_CELLGRAPHCONFIG = "property.celGraphConfig";

public static final String PROPERTY_CEL_GRAPH = "property.celGraph";

public static final String PROPERTY_CEL_SUBREPORT = "property.celSubreport";

public static final String PROPERTY_CEL_BARCODE = "property.celBarcode";

public static final String PROPERTY_CEL_ECHART = "property.celEChart";

 

public static final String PROPERTY_CEL_EXPRESSION = "property.celExpression";

public static final String PROPERTY_REPORT = "property.report";

public static final String PROPERTY_EXPORT = "property.export";

public static final String PROPERTY_PRINT = "property.print";

public static final String ATTACHED_DATASETS = "property.attacheddatasets";

public static final String REPORTINPUT = "property.reportInput";

public static final String PASSWORD = "property.password";

public static final String PASSWORD_RESET = "property.resetpassword";

 

public static final short iPROPERTY_ROW = 305;

public static final short iPROPERTY_COL = 310;

public static final short iPROPERTY_CEL_BORDER = 325;

public static final short iPROPERTY_CEL_DATATYPE = 330;

public static final short iPROPERTY_GRAPH = 331;

public static final short iPROPERTY_CEL_CELLGRAPHCONFIG = 333;

public static final short iPROPERTY_CEL_GRAPH = 335;

public static final short iPROPERTY_CEL_SUBREPORT = 340;

public static final short iPROPERTY_CEL_BARCODE = 345;

public static final short iPROPERTY_CEL_ECHART = 346;

 

public static final short iPROPERTY_CEL_EXPRESSION = 348;

public static final short iPROPERTY_REPORT = 350;

public static final short iPROPERTY_EXPORT = 355;

public static final short iPROPERTY_PRINT = 358;

public static final short iREPORTINPUT = 365;

public static final short iPASSWORD = 366;

 

// 插入

public static final String INSERT = "insert";

public static final String INSERT_BEFOREROW = "insert.insertBeforeRow";

public static final String INSERT_BEFORECOL = "insert.insertBeforeCol";

public static final String ADDROW = "insert.addRow";

public static final String ADDCOL = "insert.AddCol";

public static final String BACKGROUND = "insert.backGround";

public static final String INSERT_DATASET = "insert.dataset";

 

public static final String INSERT_CELL = "insert.insertcell";

public static final String ADD_CELL = "insert.addcell";

 

public static final String INSERT_ROWTYPE = "insert.RowType";

public static final String INSERT_COLTYPE = "insert.ColType";

 

public static final short iINSERT_BEFOREROW = 405;

 

public static final short iINSERT_BEFORECOL = 410;

 

public static final short iADDROW = 415;

public static final short iADDCOL = 420;

public static final short iBACKGROUND = 425;

public static final short iINSERT_DATASET = 430;

 

public static final short iINSERT_CELL = 441;

public static final short iADD_CELL = 443;

 

public static final short iINSERT_ROWTYPE = 455;

public static final short iINSERT_COLTYPE = 456;

 

public static final String MOVE = "move";

 

public static final String MOVE_ROW_UP = "move.rowup";

public static final String MOVE_ROW_DOWN = "move.rowdown";

public static final String MOVE_COL_LEFT = "move.colleft";

public static final String MOVE_COL_RIGHT = "move.colright";

 

public static final String MOVE_CELL_UP = "move.cellup";

public static final String MOVE_CELL_DOWN = "move.celldown";

public static final String MOVE_CELL_LEFT = "move.cellleft";

public static final String MOVE_CELL_RIGHT = "move.cellright";

 

public static final short iMOVE_ROW_UP = 461;

public static final short iMOVE_ROW_DOWN = 463;

public static final short iMOVE_COL_LEFT = 465;

public static final short iMOVE_COL_RIGHT = 467;

 

public static final short iMOVE_CELL_UP = 471;

public static final short iMOVE_CELL_DOWN = 473;

public static final short iMOVE_CELL_LEFT = 475;

public static final short iMOVE_CELL_RIGHT = 477;

 

// 配置

public static final String CONFIGURE = "configure";

public static final String ARGUMENT = "configure.argument";

public static final String MACRO = "configure.macro";

public static final String DATASET = "configure.dataset";

public static final String GROUPSET = "configure.groupset";

 

public static final short iARGUMENT = 505;

public static final short iMACRO = 510;

public static final short iDATASET = 515;

public static final short iGROUPSET = 520;

 

// 系统

public static final String SYSTEM = "system";

 

public static final String DATASOURCE = "system.dataSource";

public static final String ADDTO_CSSMANAGER = "system.addtocssmanager";

public static final String ADDTO_STYLE_CELL = "system.addtostylecell";

public static final String IMPORTEXCEL = "system.importExcel";

public static final String ESPROC_IDE = "tool.esprocide";

public static final String XMLEDITOR = "system.xmlEditor";

public static final String JSPEDITOR = "system.jspEditor";

public static final String DFX_EDITOR = "system.dfxeditor";

public static final String FUNCEDITOR = "system.funcEditor";

public static final String LOAD_ALI = "system.loadali";

public static final String PALETTEEDITOR = "system.paletteEditor";

public static final String RAQTRANSFER = "system.raqtransfer";

public static final String UPLOAD_FILE = "system.uploadfile";

public static final String OPTION = "system.options";

 

public static final String CONSOLE = "system.console";

 

public static final short iDATASOURCE = 605;

public static final short iADDTO_CSSMANAGER = 610;

public static final short iADDTO_STYLE_CELL = 611;

public static final short iESPROC_IDE = 613;

public static final short iIMPORTEXCEL = 612;

public static final short iJSPEDITOR = 615;

public static final short iDFX_EDITOR = 616;

public static final short iFUNCEDITOR = 617;

public static final short iLOAD_ALI = 628;

public static final short iPALETTEEDITOR = 618;

public static final short iRAQTRANSFER = 620;

public static final short iUPLOAD_FILE = 622;

public static final short iOPTION = 625;

public static final short iCONSOLE = 630;

 

// 模板

public static final String TEMPLATE = "template";

 

public static final String SAVETO_TEMPLATE = "template.saveAsTemplate";

public static final String TIDY_TEMPLATE = "template.tidyTemplate";

 

public static final short iSAVETO_TEMPLATE = 705;

public static final short iTIDY_TEMPLATE = 710;

//文件中心

public static final String FILECENTER = "filecenter";

public static final String LOGIN = "filecenter.login";  //登录报表中心

public static final String LOGOUT = "filecenter.logout";  //注销登录

public static final String OPENFILE = "filecenter.openfile";  //打开文件

public static final String CONNECTDATASOURCE = "filecenter.connectdatasource";  //连接数据源

public static final String UPLOADFILE = "filecenter.uploadfile";  //上传文件

/** 登录报表中心 **/

public static final short iLOGIN = 801; 

/** 注销登录 **/

public static final short iLOGOUT = 802; 

/** 打开文件 **/

public static final short iOPENFILE = 810;

/** 连接报表中心数据源 **/

public static final short iCONNECTDATASOURCE = 811; 

/** 上传文件至报表中心 **/

public static final short iUPLOADFILE = 812; 

 

// 窗口

public static final String WINDOW = "window";

 

public static final String CASCADE = "window.cascade"; // 层叠(C)

public static final String TILEHORIZONTAL = "window.tileHorizontal"; // 水平平铺(H)

public static final String TILEVERTICAL = "window.tileVertical"; // 垂直平铺(V)

public static final String LAYER = "window.layer"; // 填充(L)

 

public static final short iCASCADE = 905;

public static final short iTILEHORIZONTAL = 910; // 水平平铺(H)

public static final short iTILEVERTICAL = 915; // 垂直平铺(V)

public static final short iLAYER = 920; // 填充(L)

 

// 帮助

public static final String HELP = "help";

 

public static final String REGIST = "help.regist";

public static final String BBS = "help.bbs";

public static final String CHECK_UPDATE = "help.checkupdate";

 

public static final String TIPOFDAY = "help.tipofday";

public static final String ABOUT = "help.about";

public static final String MEMORYTIDY = "help.memoryTidy";

 

public static final String RAQ_SURPORT = "help.raqsurport";

 

public static final short iREGIST = 1001;

public static final short iBBS = 1002;

public static final short iCHECK_UPDATE = 1003;

    public static final short iABOUT = 1005;

public static final short iMEMORYTIDY = 1010;

 

public static final short iRAQ_SURPORT = 1015;

}