📄 browser.c
字号:
/**************************************************************************
Copyright (C) 2005 SHENZHEN MEIJIN CO.LTD
FILE NAME: Browser.C
MODULE NAME: browser
DESCRIPTION: 提供了浏览器对外接口的函数
对外函数声明:
BrowserGetTopLine 得到顶行
BrowserSetTopLine 设置顶行
BrowserGetTotalLine 取得总行数
BrowserLoadData 加载数据
BrowserSetExtra 设置特殊字符
BrowserCalcLineCol 计算总行列
BrowserFilter 过滤器
BrowserGetMarkData 获取mark数据
BrowserGetMarkLength 获取mark数据长度
BrowserSetMark 设置mark
BrowserIsFinished 数据加载是否完成
BrowserSetTextFont 设置字体
**************************************************************************
DTAE AUTHOR VERSION REMARKS
=========== ========== ========= ======================================
2006-3-5 gaolinhui V1.0 create
***************************************************************************/
#include "kernel.h"
#include "BrowserIn.h"
/************************************************************************/
/* 函数名称: BrowserGetTopLine */
/* 函数描述: 得到浏览器顶行 */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-3-1 gaolinhui 1.0 创建 */
/************************************************************************/
UINT32 BrowserGetTopLine(MBrowser *handle)
{
if(handle->wReserved != BROWSER_INIT_SUCCESS)
return 0;
return (INT)handle->pBrwInfo->dwTopLine;
}
/************************************************************************/
/* 函数名称: BrowserSetTopLine */
/* 函数描述: 设置浏览器顶行 */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-3-1 gaolinhui 1.0 创建 */
/************************************************************************/
BOOL BrowserSetTopLine(MBrowser *handle, UINT32 dwTopLine)
{
if(handle->wReserved != BROWSER_INIT_SUCCESS)
return FALSE;
return __BrowserSetTopLine(handle,dwTopLine,FALSE);
}
/************************************************************************/
/* 函数名称: BrowserGetTotalLine */
/* 函数描述: 得到总行数 */
/* 当前版本: 1.0 */
/* 作 者: gaolinhui */
/* 输入参数: */
/* handle - 对象句柄 */
/* 输出参数: */
/* NONE */
/* 返回值 : */
/* 总行数 */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-3-1 gaolinhui 1.0 创建 */
/************************************************************************/
UINT32 BrowserGetTotalLine(MBrowser *pBrowserer)
{
if(pBrowserer->wReserved != BROWSER_INIT_SUCCESS)
return 0;
return (INT)pBrowserer->pBrwInfo->dwTotalLine;
}
/************************************************************************/
/* 函数名称: BrowsererLoadData */
/* 函数描述: 浏览器装入数据 */
/* 当前版本: 1.0 */
/* 作 者: gaolinhui */
/* 输入参数: */
/* handle - 对象句柄 */
/* pDataBuf - 数据指针 */
/* wStartCol - 起始列 */
/* 输出参数: */
/* NONE */
/* 返回值 : */
/* TRUE/FALSE */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-3-1 gaolinhui 1.0 创建 */
/************************************************************************/
BOOL BrowserLoadData(MBrowser *handle, UINT8 *pDataBuf, UINT16 wState, UINT16 wStartCol)
{
UINT32 dwTotal;
UINT16 font;
if(handle->wReserved != BROWSER_INIT_SUCCESS)
return FALSE;
//================================
//Modified by Liang Ruhui on 2007-9-11
//保护系统字体
font = GraphGetFontID();
// font = handle->pBrwInfo->wFontID;
//================================
/*设置相关成员*/
handle->pBrwInfo->pBuffer = pDataBuf;
handle->pBrwInfo->dwTopLine = 0; /*默认起始行0*/
if (wStartCol >= handle->pBrwInfo->wTotalCol)
{
wStartCol = 0;
}
handle->pBrwInfo->wStartCol = wStartCol;
handle->pBrwInfo->wTabWidth = BrowserTabWidth(handle);
/*计算总行数*/
dwTotal = BrowserCalcTotalLine((MBrowser *)handle, (UINT16)(wState|BROWSER_STATE_INITIAL) );
/*设置总行数*/
handle->pBrwInfo->dwTotalLine = dwTotal;
/*设置状态*/
handle->pBrwInfo->wStates = wState;
handle->pBrwInfo->byTabGrade = 0;
handle->pBrwInfo->pMarkCur = NULL;
handle->pBrwInfo->pMarkStart = NULL;
handle->pBrwInfo->pMarkEnd = NULL;
// handle->pBrwInfo->wFontID = font;
GraphSetFontID(font);
ClrFontInvertStyle();
return TRUE;
}
/************************************************************************/
/* 函数名称: BrowserCalcLineCol */
/* 函数描述: 计算行列数 */
/* 当前版本: 1.0 */
/* 作 者: gaolinhui */
/* 输入参数: */
/* handle - 对象句柄 */
/* pData - 数据指针 */
/* line,col - 行列 */
/* 输出参数: */
/* line,col - 行列 */
/* 返回值 : */
/* 行数 */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-3-1 gaolinhui 1.0 创建 */
/************************************************************************/
UINT32 BrowserCalcLineCol(MBrowser *handle,UINT8 *pData,
UINT32 *line,UINT16 *col)
{
UINT32 dwCurLine;
UINT16 wTotalCol,wCurCol,wMoveLen;
UINT16 wUnitWidth,wBakCol;
UINT8* pUnitBuff;
MBrowser mBrowserer,*pBrowserer;
UINT32 dwTotalLine;
if(handle->wReserved != BROWSER_INIT_SUCCESS)
return 0;
pUnitBuff = BROWSER_STACK_ALLOC(handle,BROWSER_UNIT_MAXLEN);
/*复制句柄数据*/
memcpy(&mBrowserer,handle,sizeof(MBrowser));
mBrowserer.pBrwInfo = BROWSER_STACK_ALLOC(handle,sizeof(MBrowserInfo));
memcpy(mBrowserer.pBrwInfo, handle->pBrwInfo, sizeof(MBrowserInfo));
/*设置工作指针*/
pBrowserer = &mBrowserer;
/*初始化*/
dwCurLine = (*line); /*当前行*/
wCurCol = (*col); /*当前列*/
if ((pBrowserer->pBrwInfo->wStates & BROWSER_STATE_TAB)
&& (wCurCol != 0))
{
pBrowserer->pBrwInfo->byTabGrade = 1;
}
else
{
pBrowserer->pBrwInfo->byTabGrade = 0;
}
wTotalCol = pBrowserer->pBrwInfo->wTotalCol; /*总列数*/
/*开始遍历数据,累加行列数*/
while (1)
{
/*得到一个unit,字符串保存在pUnitBuff中*/
wUnitWidth = BrowserGetOneUnit(pBrowserer, pData,
pUnitBuff, &wMoveLen,BROWSER_SCANNING);
/*需要换行*/
if (pBrowserer->pBrwInfo->wStates & BROWSER_STATE_RETURN)
{
if (wCurCol != 0)
{
wBakCol = wCurCol;
dwCurLine ++;
wCurCol = 0;
}
pBrowserer->pBrwInfo->wStates &= ~BROWSER_STATE_RETURN;
}
/*居中显示*/
if (pBrowserer->pBrwInfo->wStates & BROWSER_STATE_CENTER)
{
UINT16 co;
/*起始位置*/
co = BrowserCenterStart(pBrowserer,pData,wCurCol,wTotalCol);
if (co != 0)
{
wCurCol += co;
pBrowserer->pBrwInfo->wStates &= ~BROWSER_STATE_CENTER;
}
}
if (wUnitWidth == (UINT16)-1) /*换行*/
{
UINT16 bak;
bak = wCurCol;
/*另起一行*/
if (wCurCol != 0)
{
dwCurLine ++;
wCurCol = 0;
}
/*拨动数据指针*/
pData += wMoveLen;
if (*pData != BROWSER_DATA_END)
{
if (pBrowserer->pBrwInfo->wOptions & BROWSER_OPTION_ALIGNLEFT)
{
/*去掉行首空格*/
while (*pData == ' ')
{
pData ++;
if (*pData == BROWSER_DATA_END)
{
if (dwCurLine) {
dwCurLine --;
wCurCol = bak;
}
break;
}
}
}
}
else
{
if (dwCurLine) {
dwCurLine --;
wCurCol = bak;
}
break;
}
continue;
}
else if (wUnitWidth == 0) /*结束符*/
{
break;
}
/* 单词显示长度大于行最大显示长度 */
else if (wUnitWidth > wTotalCol)
{
UINT8 *p,*ptr;
UINT range;
UINT32 dwLen,l,i;
UINT16 w,h;
/*如果不是行开始位置则另起一行*/
if (wCurCol != 0)
{
dwCurLine ++;
}
wBakCol = wCurCol;
wCurCol = 0;
/*标记符长度*/
l = (UINT32)wMoveLen - strlen(pUnitBuff);
p = pUnitBuff;
i = 0;
while (*p)
{
/*数据长度*/
dwLen = p - pUnitBuff;
ptr = pUnitBuff + dwLen;
/*计算一行最多显示的字符串指针位置*/
range = wTotalCol;
p = BrwWidthCutStr(ptr,FontGetLib(),0,&range);
if (*p)
{
dwCurLine ++;
}
}
FontGetStringRect(&w,&h,ptr);
wCurCol = w;
pData += wMoveLen;
continue;
}
/*总长度超行,另起一行*/
else if ((wCurCol + wUnitWidth) > wTotalCol)
{
wBakCol = wCurCol;
wCurCol = 0;
dwCurLine ++;
}
if (*pData == ' ' && wCurCol == 0
&& (pBrowserer->pBrwInfo->wOptions & BROWSER_OPTION_ALIGNLEFT))
{
/*去掉行首空格*/
while (*pData == ' ')
{
pData ++;
if (*pData == BROWSER_DATA_END)
{
dwCurLine --;
wCurCol = wBakCol;
goto calcEnd;
}
}
/*缩进*/
if (pBrowserer->pBrwInfo->wStates & BROWSER_STATE_TAB)
{
if (pBrowserer->pBrwInfo->byTabGrade == 0)
{
wCurCol = BROWSER_TAB_LENGTH;
pBrowserer->pBrwInfo->byTabGrade = 1;
}
else
{
wCurCol = pBrowserer->pBrwInfo->wTabWidth;
}
}
}
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -