修改AbiWord244的HyperLink

标题:修改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

你可能感兴趣的:(perl)