修改AbiWord244的HyperLink

本文介绍如何修改AbiWord 2.4.4版本中的超链接功能,实现通过双击超链接文本来直接调用指定程序打开相应文件的方法。涉及源代码修改及资源释放等步骤。

标题:修改AbiWord244的HyperLink
作者:kagula(lee353086)
时间:2008-3-7

环境:
   [1]AbiWord2.4.4源码包
   [2]Anjuta2.2.3(你也可以使用其它编辑工具)
   [3]Ubuntu Linux7.10 Desktop(你也可以使用其它Linux系统)

概要:
    修改AbiWord244中的Hyperlink功能,目的是使用户,双击Hyperlink过的文本后,
    用指定的程序打开,以这个文本命名的文件。
 
正文:
   要修改的代码段,分为两块[a]标记Hyperlink的代码段[b]双击Hyperlink事件响应代码

   [a]标记Hyperlink的代码段
     因为,我们现在不需要Abiword程序出现Hyperlink Dialog。
    打开文件[你的源码包解压路径]/abi/src/wp/ap/xp/ap_EditMethods.cpp
    找到Defun1(insertHyperlink)函数体。
    函数体尾部代码段内找到s_doHyperlinkDlg(pView);
    原代码
    s_doHyperlinkDlg(pView);
    修改后的代码:  
    char strT[]={"kagula/0/0"};   //这是Hyperlink的Target名,你也可以取另一个名字   
    pView->cmdInsertHyperlink(strT);  //插入连接字符串
    //s_doHyperlinkDlg(pView);  //注释掉 HyperLink对话框

    [b]双击Hyperlink事件响应代码
      目的,双击Hyperlink文本,打开以Hyperlink文本作为文件名,由你指定的程序打开这个文件。
     打开文件[你的源码包解压路径]/abi/src/text/fmt/xp/fv_View_cmd.cpp
     找到void FV_View::cmdHyperlinkJump(UT_sint32 xPos, UT_sint32 yPos)函数体
     [b-1]得到Hyperlink文本(即我们要打开文件的文件名)
        在fp_HyperlinkRun * pH = pRun->getHyperlink();代码后,插入一面的代码
           (因为,这时我们已经能确定得到了正确的pRun指针)
        UT_uint32 nS=pRun->getBlockOffset();
    nS=nS+pRun->getBlock()->getPosition(true);
    UT_uint32 nL=pRun->getLength()+1;
    cmdSelect(nS,nS+nL);

    UT_UCS4Char *pText=NULL;
    getSelectionText(pText);
    XML_Char *pTextCopy=new XML_Char [UT_UCS4_strlen(pText)+1];
    UT_UCS4_strcpy_to_char(pTextCopy, pText);  //其中pTextCopy指针中,已经存放了我们需要的,文件名(Hyperlink文本)
     [b-2]用指定的程序,打开pTextCopy(这个指针指向的文件名)文件。
       //modified by lijun
    if(pText==NULL)
    {
        return ;
    }
   
    if ( fork() == 0 ) {   //fork在unistd.h中定义,别忘记加头文件噢!
        char pszCommand[]={"/usr/bin/gedit /0"};//修改这里;pszCommand指向你应用程序所在位置
        char pszCommand2[PATH_MAX];  //注意PATH_MAX这个常量,在limits.h中定义
        memset(pszCommand2,0,sizeof(pszCommand2));
                strcpy(pszCommand2,pszCommand);
        strcat(pszCommand2,pTextCopy);       
                system(pszCommand2);
                exit(0);  //exit在sys/types.h中定义,记得加头文件。
        }
     [b-3]释放资源
         哈哈,这个可不是Java,你需要手动释放自己分配的资源
     if(pText!=NULL)
    {
        delete []pText;
        delete []pTextCopy;
    }
        cmdUnselectSelection();  //取消块选择。这段代码可选。
     [b-4]把原代码最后一句多余的代码注释掉(或许你还可以注释掉更多的代码,但,这不在讨论之列)
         原代码
         gotoTarget(AP_JUMPTARGET_BOOKMARK, pJump);
        修改后的代码
        //gotoTarget(AP_JUMPTARGET_BOOKMARK, pJump);
备注:
   [你的源码包解压路径]
   下载的AbiWord2.4.4源码包的解压路径

相关网站:
AbiWord开发,参考资料
http://www.abisource.com/doxygen/index.html
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kagula086

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值