sTodo 中的脚本
视频锁定
{$ currentTime | date:'mm:ss' $}
{$ timeLeft | date:'mm:ss' $}
脚本入口 main 方法:
function main(){
var app = Application;
var ui = app.getUI();
//set look and feel to windows
ui.setLookAndFeel("windows");
//load some new scripts
app.activePlugin("scripts/json.js");
app.activePlugin("scripts/date.js");
app.activePlugin("scripts/util.js");
app.activePlugin("scripts/menubar.js");
app.activePlugin("scripts/misc.js");
app.launch();
//loadTodosFromFile("todos.txt");
}
这里的 main 函数首先获取 Java 端暴露的 Application 对象,然后设置 L&F 为 Windows 平台,然后依次加载一些脚本,最后调用 Application 上的方法 launch 启动 Java 端。 另外一个暴露给 Java 端的函数是初始化菜单栏的函数:
//this function will be invoked from java code, MainFrame...
function _customizeMenuBar_(menuBar){
menuBar.add(buildPluginMenu());
menuBar.add(buildHelpMenu());
}
menubar参数通过Java传递过来,然后依次调用buildPluginMenu和buildHelpMenu 函数,创建新的菜单项,注册事件监听器,我们这里进讨论 buildPluginMenu 函数:
function buildPluginMenu(){
var menuPlugin = new JMenu();
menuPlugin.setText("Plugin");
menuPlugin.setIcon(new ImageIcon("imgs/plugin.png"));
var menuItemListPlugin = new JMenuItem();
menuItemListPlugin.setText("list plugins");
menuItemListPlugin.addActionListener(
new JavaAdapter(
ActionListener, {
actionPerformed : function(event){
var plFrame = new JFrame("plugins list");
var epNote = new JEditorPane();
var s = "";
pluginList = Application.getPluginList();
for(var i = 0; i<pluginList.size();i++){
var pi = pluginList.get(i);
s += pi.getName()+":"+pi.getDescription()+"\n";
}
epNote.setText(s);
epNote.setEditable(false);
plFrame.add(epNote, BorderLayout.CENTER); plFrame.setSize(200,200);
plFrame.setLocationRelativeTo(null);
plFrame.setVisible(true);
}
}
));
menuPlugin.add(menuItemListPlugin);
return menuPlugin;
}
buildPluginMenu 函数创建一个新的 JMenu 对象,并为其添加一个 JMenuItem,当点击 该菜单项时,创建一个新的 JFrame,列出当前软件已经安装的插件(通过调用 Application.getPluginList()获取),运行效果如下图:
图 列出当前已经安装的插件列表
当然,sTodo 中还有很多地方使用了插件,感兴趣的朋友可以自行参考,比如通过脚本来建立新的待办事项,发送待办事项到指定邮箱,日期格式的分析等。
在线练习
{$ activeFileHint $}