手机探索者开发实录--实现设备端的MobileExplorer

前端之家收集整理的这篇文章主要介绍了手机探索者开发实录--实现设备端的MobileExplorer前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
手机探索者开发实录--实现设备端的MobileExplorer

转载时请注明出处和作者联系方式
作者联系方式:李先静 <xianjimli at hotmail dot com>

在broncho手机上实现MobileExplorer接口相对比较容易,大约有2K的代码,其主要包括以下几个部件:

类型管理器MebronchoTypeManager 我们说过在所有接口中,用到的类型信息都是以整数传递的,如果想了解类型更详细的信息,需要调用mobile_explorer_get_type_info来获取。这里所指类型主要是指对象的类型和文件的类型,也可以是任何其它整数到字符串的映射,有点像X Window中的atom。类型管理器用来实现类型信息的注册查询

GUI封装类MebronchoGuiHelper 在MobileExplorer中主要有三个函数与GUI有关:设置剪切板数据,获取剪切板数据和提交输入的文本。broncho手机的GUI是GTK+2.6,这三个函数的实现如下:

设置剪切板数据

    @H_301_23@MeRetmebroncho_gui_helper_clipboard_set_data(MebronchoGuiHelper*thiz,MeData*data)
  1. {
  2. @H_301_23@MeRetret=ME_RET_FAIL;
  3. me_return_val_if_fail(thiz!=NULL&&data!=NULL,ME_RET_PARAMS);
  4. @H_301_23@
  5. do
  6. @H_301_23@{
  7. GdkDisplay*display=gdk_screen_get_display(gdk_screen_get_default());
  8. @H_301_23@me_break_if_fail(display!=NULL);
  9. @H_301_23@GtkClipboard*clipboard=gtk_clipboard_get_for_display(display,GDK_SELECTION_CLIPBOARD);
  10. me_break_if_fail(clipboard!=NULL);
  11. @H_301_23@
  12. gtk_clipboard_set_text(clipboard,data->data,data->length);
  13. @H_301_23@
  14. ret=ME_RET_OK;
  15. @H_301_23@}while(0);
  16. @H_301_23@returnret;
  17. }
  18. @H_301_23@

获取剪切板数据

    @H_301_23@staticvoidclipboard_get_data(GtkClipboard*clipboard,constgchar*text,gpointeruser_data)
  1. {
  2. @H_301_23@MeData*data=(MeData*)user_data;
  3. me_return_if_fail(clipboard!=NULL&&text!=NULL&&data!=NULL);
  4. @H_301_23@
  5. data->type=ME_TYPE_TEXT_PLAIN;
  6. @H_301_23@data->data=strdup(text);
  7. data->length=strlen(text);
  8. @H_301_23@
  9. return;
  10. @H_301_23@}
  11. @H_301_23@MeRetmebroncho_gui_helper_clipboard_get_data(MebronchoGuiHelper*thiz,GDK_SELECTION_CLIPBOARD);
  12. me_break_if_fail(clipboard!=NULL);
  13. @H_301_23@
  14. gtk_clipboard_request_text(clipboard,clipboard_get_data,data);
  15. @H_301_23@
  16. ret=ME_RET_OK;
  17. @H_301_23@}while(0);
  18. @H_301_23@returnret;
  19. }
  20. @H_301_23@


提交输入的文本(通过SCIM HelperAgent提交)

    @H_301_23@staticconstHelperInfog_helper_info(String("6a88133e-e114-475b-9fc9-000000000000"),
  1. "RemoteinputHelper","","RemoteinputHelper",SCIM_HELPER_STAND_ALONE|SCIM_HELPER_AUTO_STA
  2. @H_301_23@RT);
  3. @H_301_23@thiz->helper_agent=newHelperAgent();
  4. thiz->helper_agent->open_connection(g_helper_info,":0.0");
  5. @H_301_23@
  6. MeRetmebroncho_gui_helper_commit(MebronchoGuiHelper*thiz,constchar*text)
  7. @H_301_23@{
  8. me_return_val_if_fail(thiz!=NULL&&thiz->helper_agent!=NULL&&text!=NULL,ME_RET_PARAMS)
  9. @H_301_23@;
  10. @H_301_23@thiz->helper_agent->commit_string(-1,scim::utf8_mbstowcs(text));
  11. @H_301_23@returnME_RET_OK;
  12. }

XObject转换函数 XObject用于传输,它基本上和一张表对应起来,包含有表名和记录ID,以及记录的各个Field,每个Field又包含名称,类型和值。broncho的数据是存放在sqlite中的,不过我们在上面做了面向对象的封装,用DbDataObj代表一条记录。为了在XObject和DbDataObj之间建立一座桥梁,所以需要编写几个转换函数

公共函数mebroncho_common 只有几个文件和目录操作的函数

手机探索者接口实现MobileExplorer 这里主要对上述函数和我们的objectdb的包装。每个函数都对参数和权限检查,如果参数不对则返回ME_RET_PARAMS,如果权限不对则返回ME_RET_PERMISSION。 ~~end~~

猜你在找的Sqlite相关文章