2005-11-11

用JavaScript开发你的Google桌面(Google Desktop)显示插件(二)

二、熟悉脚本编程的模型

用脚本编写的插件是架构在plug-in helper框架之上的。用JavaScript我们可以修改插件的属性和显示的内容,还可以修改插件菜单,实现设定对话框等等。我们还可以使用标准的JavaScript特性、函数和数据类型。但是对目前的发行版,脚本不能在桌面边框的界面中使用本地的用户界面元素。

脚本插件接口了下面的全局变量供开发者使用:
  1. pluginHelper
    用来修改插件的配置信息。

    • 属性
      • title
        • 字符串,只写
        • 用来设定插件的标题
      • about_text
        • 字符串,只写
        • 用来设定关于对话框里面显示的文本
      • content_items
        • content_item对象的数组,可读写
        • 保存显示内容条目的数组
      • max_content_items
        • 整数,可读写
        • 可以显示的最大内容条目数。默认值为25,但是插件可以修改。
      • window_width
        • 整数,只读
        • 插件窗口的宽度,单位为点阵。
      • window_height
        • 整数,只读
        • 插件窗口的高度,单位为点阵。
      • pin_images
        • image数组,可读写
        • Array of images to use for the 'pin' icon, which when clicked pins the clicked item at the top of the list.
    • 方法
      • SetFlags(plugin_flags, content_flags)
        • 没有返回值
        • 设定插件和内容的标志,从而影响插件的行为。
      • SetIcons(small_icon, large_icon)
        • 没有返回值
        • 设定插件标题和关于对话框里面的图标。
      • AddContentItem(content_item, display_options)
        • 没有返回值
        • 添加指定的内容条目。
      • RemoveContentItem(content_item)
        • 没有返回值
        • 移去指定的内容条目。
      • RemoveAllContentItems()
        • 没有返回值
        • 移去所有的内容条目。
    • 事件句柄
      • onShowOptionsDlg
        • 在显示设定对话框前对其进行初始化。原型:InitDialog(window)
        • 返回false取消对话框,true或者不返回任何东西的情况下显示对话框
      • onAddCustomMenuItems
        • 在显示菜单前对其进行初始化。原型:AddCustomMenuItems(menu)
        • 不需返回
      • onCommand
        • 执行GD API定义的命令(命令形式为GDD_CMD_xxxx)。原型:OnCommand(command)
        • 不需返回
      • onDisplayStateChange
        • 显示状态变化时调用。原型:OnDisplayStateChange(new_display_state)
        • 不需返回

  2. ContentItem
    • 属性
      • image
        • Image类型,可读写
        • 用来显示条目的图像
      • notifier_image
        • Image类型,可读写
        • 显示在提醒器里面的图像
      • time_created
        • 时间类型,可读写
        • 条目的创建时间
      • heading
        • 字符串,可读写
        • 条目显示的标题
      • source
        • 字符串,可读写
        • 条目的网站/新闻来源
      • snippet
        • 字符串,可读写
        • 条目的摘要
      • open_command
        • 字符串,可读写
        • 打开或者双击条目时要打开的地址或者文件。
      • layout
        • 整数,可读写
        • 条目显示的布局
      • tooltip
        • 字符串,可读写
        • 提示信息
    • 方法
      • SetRect(x, y, width, height)
        • 不返回任何东西
        • 设定条目的显示位置。在设定条目的位置前,需要打开ANUAL_LAYOUT标志。否则,条目将会在缺省的位置 出现。
    • 事件句柄
      • onDrawItem
        • 描绘条目的时候调用.
        • 原型:DrawItem(item, display_target, graphics, x, y, width, height)
        • 不需返回
      • onGetHeight
        • 取得给定宽度的条目的高度
        • 原型:GetHeight(item, display_target, graphics, width)
        • 返回给定宽度的条目的高度
      • onOpenItem
        • 用户打开或双击条目的时候调用
        • 原型:OpenItem(item)
        • 不需返回
      • onToggleItemPinnedState
        • 用户点击pin按钮的时候调用
        • 原型:ToggleItemPinnedState(item)
        • 不需返回
      • onGetIsTooltipRequired
        • 判断指定位置显示的条目是否需要提示信息
        • 原型:GetIsTooltipRequired(item, display_target, graphics, x, y, width, height)
      • onDetaisView
        • 显示指定条目的时候显示。
        • 原型:OnDetailsView(item)
        • 不返回会取消细节视图,或者返回有以下属性的对象
          • obj.title 细节视图里面显示的标题
          • obj.details_control 细节视图里面显示的activeX控件
          • obj.flags 控制细节视图显示布局和用途的标志
        • 以上参数的更多细节请参看文档中IGoogleDesktopDisplayContentItemHandler接口的OnDetailsView事件。
      • onProcessDetailsViewFeedback
        • 在细节视图中处理用户动作
        • 原型:ProcessDetailsViewFeedback(item, details_view_flags)
        • 不需返回
      • onRemoveItem
        • 用户删除内容条目的时候触发
        • 原型:RemoveItem(item)
        • 返回true取消删除操作,返回false确认操作,删除指定内容条目。
  3. options
    • 方法
      • GetValue(key_text)
        • 返回指定Key对应的Value。
      • PutValue(key_text, value)
        • 设定指定Key的Value。
      • Clear()
        • 清除所有的设定。
  4. utils
    • 方法
      • loadImage(file_path)
        • 返回装入的图片
        • 只支持本地文件,不支持Url
      • setInterval(handler, elapse_ms)
        • 返回新产生的计时器的id
        • 设定周期调用handler的时间间隔
      • clearInterval(timer_id)
        • 清除/停止指定的计时器
      • setTimeout(handler, elapse_ms)
        • 返回新的计时器id
        • 设定一次性调用handler的计时器的时间间隔。
      • clearTimeout(timer_id)
        • 清除/停止指定的计时器
      • alert(text)
        • 显示一个信息对话框
      • confirm(text)
        • 显示一个让用户选择确定和取消的对话框
        • 用户选择ok返回true,选择cancel返回false
      • prompt(label, default_text)
        • 显示个对话框让用户进行输入
        • 返回用户输入的文本
  5. Graphics
    • 方法
      • DrawLine(x1, y1, x2, y2, color);
        • 用color画条从x1,y1到x2,y2的直线
      • DrawRect(x, y, width, height, line_color, fill_color)
        • 用指定坐标,制定颜色画个长方形
      • DrawImage(x, y, width, height, image, alpha_percent)
        • 在指定长方形内显示图片,可以设定透明度alpha_percent,范围0-100
      • DrawText(x, y, width, height, text, color, flags, font)
        • 在指定长方形内显示文字
      • GetTextWidth(text, flags, font)
        • 得到指定字体的文本的宽度
      • GetTextHeight(text, width, flags, font)
        • 得到指定字体的文本的高度
  6. Menu
    • 方法
      • AddItem(item_text, style, handler)
        • 增加一个菜单,菜单的样式是gddMenuItemFlagXXXX常量的组合。菜单事件处理函数的原型是OnMenuItem(item_text)。
      • SetItemStyle(item_text, style)
        • 设定指定菜单的样式。
      • AddPopup(popup_text)
        • 加入一个子菜单或者弹出菜单。
  7. Window
    • 方法
      • AddControl(ctrl_class, ctrl_type, ctrl_id, text, x, y, width, height)
        • 返回新控件的WindowControl对象
        • 创建一个给定数据的控件并加入窗体内。ctrl_class应该是gddWndCtrlClassXXX中的一个,ctrl_type应该是gddWndCtrlTypeXXX中的一个。ctrl_id, text, x, y, width和height等参数会直接传给ctrl_class的内,所以他们的值需要满足那些属性的要求。
      • GetControl(ctrl_id)
        • 返回指定Id的WindowControl对象。
    • 事件句柄
      • onClose
        • 原型:OnClose(button_id),button_id是gddIdXXXX中的一个。
        • 返回false保持窗口不关闭,返回true或者不返回怎窗口关闭。
  8. WindowControl
    • 属性
      • id
        • 字符串,可读写
        • 控件的标识符
      • enabled
        • 布尔变量,可读写
        • 设定控件是否可用
      • text
        • 对于列表控件,是字符串数组。对其他控件是字符串。可读写。
        • 用于控件的显示文本。
      • value
        • 对于列表控件是当前选中的字符串。对于复选框,是布尔变量,表明选择状态。对于其他控件,就是显示的文本。可读写。
      • x
        • 整数,可读写。控件的x坐标。
      • y
        • 整数,可读写。控件的y坐标。
      • width
        • 整数,可读写。控件的宽度。
      • height
        • 整数,可读写。控件的高度。

请不要吝惜您的评论,每一条评论,都是我在漫漫长夜前行的力量

4 条评论:

Blogger zeus 说...

继续呀 好像还没有完

10:26 上午

 
Blogger tiny 说...

En,还没完

还在写,最近有点忙

11:08 上午

 
Anonymous 匿名 说...

你好!
我想向你请教一个问题。
现在我在负责公司文档服务器,使用google桌面可以实现很强大的关键字搜索功能,但是其权限限制方面却非常弱。我安装了DNKA插件,也只能实现非常简单的用户管理功能。比如简单的说,我想对A用户开放两个目录的开放权限时就无法设置,因为DNKA只支持一个用户设定一个目录作为搜索目标。
我能想到的解决方案有:
1.下载具有更强用户管理功能的插件。--可惜一直没有找到合适的。
2.修改google桌面,使其只能列出搜索结果,但用户无法打开。需配合FTP服务器获取文件。等于把权限控制的问题由FTP服务器来完成了。--但我对google桌面使用的语言不甚了解,一时找不到如何下手。
3.重新编写插件,自己开放用户管理功能。--我也是软件专业毕业,以前用java开发,也曾经接触过网站方面的active控件,但没有用过javascript。对你介绍的开发环境也挺陌生的,不知道该如何下手,工作量大概多少。
看高手是否能指点一二?可以加我msn联系:
dongyuexia@hotmail.com
盼回!
多谢!!

5:55 下午

 
Anonymous 匿名 说...

还以为会有有用的信息呢,结果就是从google主页转来的那点DOC!能不能直接整点别的地方没有的,是你自己弄出来的东西?

9:49 下午

 

发表评论

<< 主页