Files
FireAlarmCtrlCn/MyCode/Gui/ListViewDevice.cpp
2026-04-06 19:02:09 +08:00

1123 lines
33 KiB
C++

#include "gType.h"
#include "GraphLow.h"
#include "GraphBase.h"
#include "GlobalString.h"
#include "RuntimeData.h"
#include "Runtime.h"
#include "Gui.h"
#include "ListViewDevice.h"
#define TextTopOffSet 6
#define ListLineCnt 10
#define IconVcnt 5
#define IconHcnt 10
#define HLineTextRight 780
#define HSpace 33
#define clOdd clMoneyGreen
#define clEven clWhiteBlue
static const char cType[8] = "类型";
static const char cIndex[8] = {"编号"};
static const char cActive[8] = {"搭载/"};
static const char cCarry[8] = {"已登记"};
static const char cVoltage[8] = {"电压"};
static const char cCurrent[8] = {"电流"};
static const char cDescp[8] = {"描述"};
static const char cUserCode[8] = {"用户码"};
static const char cAddr[8] = {"地址"};
static const char cAtr1[8] = {"特征1"};
static const char cAtr2[8] = {"特征2"};
static const char cAtr3[8] = {"特征3"};
static const char cAtr4[8] = {"特征4"};
static const int Lv0Left[5] ={
10, 120, 280, 460, 610
};
static const int Lv1Left[6] ={
4, 64, 164, 230, 340, 410
};
void TListViewDevice::Init()
{
this->DevProperty = nullptr;
Tag.Reset();
Items[0].Reset();
Items[1].Reset();
Items[2].Reset();
IsShow = 0;
}
void TListViewDevice::SetFontSize(int size)
{
FontSize = size;
FontHeight = GetFontHeight(FontSize);
LineCount =Content.Height / FontHeight;
}
void TListViewDevice::SetListColWidth(int w0, int w1, int w2, int w3, int w4,int w5,int w6, int w7, int w8)
{
unsigned int i;
ListView.ColWidth[0] = w0;
ListView.ColWidth[1] = w1;
ListView.ColWidth[2] = w2;
ListView.ColWidth[3] = w3;
ListView.ColWidth[4] = w4;
ListView.ColWidth[5] = w5;
ListView.ColWidth[6] = w6;
ListView.ColWidth[7] = w7;
ListView.ColWidth[8] = w8;
ListView.ColRight[0] = ListView.ColLeft[0] + w0;
for(i=1; i<9; i++){
ListView.ColLeft[i] = ListView.ColRight[i-1] +1;
ListView.ColRight[i] = ListView.ColLeft[i] + ListView.ColWidth[i];
}
}
void TListViewDevice::RenderBackGround(void)
{
RectFillRender(ContentGeometry.Left, ContentGeometry.Top, ContentGeometry.Right, ContentGeometry.Bottom, ContentColor);
}
void TListViewDevice::RenderBackGround(unsigned int aClr)
{
RectFillRender(ContentGeometry.Left, ContentGeometry.Top, ContentGeometry.Right, ContentGeometry.Bottom, aClr);
}
void TListViewDevice::RenderContent(void)
{
#define FixColColor clMedGray
#define OddColor clNearMoneyGreen
unsigned int x,y, y2, clr;
RectFillRender(Content.Left, Content.Top, Content.Right, Content.Bottom, Color);
}
void TListViewDevice::DrawSelfLevel0(void)
{
RenderBackGround();
RectFillRender(Lv.Caption.Left, Lv.Caption.Top, Lv.Caption.Right, Lv.Caption.Bottom, CaptionColor);
if(LanguageEnCn == 0){
TextRender_string24(Lv.Caption.Left + 10, Lv.Caption.Top +4, clNearWhite, CaptionColor, "回路->注册信息");
}else{
TextRender_string24(Lv.Caption.Left + 10, Lv.Caption.Top +4, clNearWhite, CaptionColor, "Loop->Registered Information");
}
for(int i=0; i<Lv.Grid.UsingCount; i++)RectFillRender(Lv.Grid.Left[i], Lv.Grid.Top[i], Lv.Grid.Right[i], Lv.Grid.Bottom[i], ItemColor);
if(LanguageEnCn == 0){
TextRender_string24(Lv0Left[0],Lv.Grid.Top[1] + 4, clNearWhite, "回路号");
TextRender_string24(Lv0Left[1],Lv.Grid.Top[1] + 4, clNearWhite, "已注册点数");
TextRender_string24(Lv0Left[2],Lv.Grid.Top[1] + 4, clNearWhite, "未注册点数");
TextRender_string24(Lv0Left[3],Lv.Grid.Top[1] + 4, clNearWhite, "屏蔽地址数");
TextRender_string24(Lv0Left[4],Lv.Grid.Top[1] + 4, clNearWhite, "已注册比例");
}else{
TextRender_string24(Lv0Left[0],Lv.Grid.Top[1] + 4, clNearWhite, "Loop");
TextRender_string24(Lv0Left[1],Lv.Grid.Top[1] + 4, clNearWhite, "Registered");
TextRender_string24(Lv0Left[2],Lv.Grid.Top[1] + 4, clNearWhite, "UnRegister");
TextRender_string24(Lv0Left[3],Lv.Grid.Top[1] + 4, clNearWhite, "Blocking");
TextRender_string24(Lv0Left[4],Lv.Grid.Top[1] + 4, clNearWhite, "Reg Ratio");
}
TMyString::sClear(Text);
if(LanguageEnCn == 0){
TMyString::sFromStr("机器号", Text);
}else{
TMyString::sFromStr("CtrlNum", Text);
}
TMyString::sAddOn2Dg(MainCtl.fData.Split.MyNum,Text);
if(LanguageEnCn == 0){
TMyString::sAddOnStr("本机", Text);
}else{
TMyString::sAddOnStr(" Local", Text);
}
TextRender_string24(Lv.Grid.Left[ 0]+ 10, Lv.Grid.Top[ 0]+ 4, clNearWhite, Text);
TMyString::sClear(Text);
if(LanguageEnCn==0)TMyString::sFromStr("总回路数", Text);
else TMyString::sFromStr("Loop(s)", Text);
TMyString::sAddOn2Dg(MainCtl.fData.Split.PortCount,Text);
if(LanguageEnCn==0)TMyString::sAddOnStr(" 已注册总点数",Text);
else TMyString::sAddOnStr(" Mounted Device(s)",Text);
int aCn =0;
for(int i=0; i<dPORT_MAX_COUNT; i++){
if(MainCtl.fData.Split.ExistTablePort[i] == 0xA5){
for(int x=0; x<dEP_MAX_COUNT_PER_PORT; x++){
if( (Port[i].ExistTable[x] == 0xA5) && (Port[i].dTypeTable[x] != 0) ){
aCn++;
}
}
}
}
TMyString::sAddOn5Dg(aCn,Text);
TextRender_string24(Lv.Grid.Left[ 0]+ 360, Lv.Grid.Top[ 0]+ 4, clNearWhite, ItemColor, Text);
}
void TListViewDevice::DrawSelfLevel1(void)
{
RectFillRender(Lv.Caption.Left, Lv.Caption.Top, Lv.Caption.Right, Lv.Caption.Bottom, CaptionColor);
if(LanguageEnCn == 0){
TextRender_string24(Lv.Caption.Left + 10, Lv.Caption.Top +4, clNearWhite, CaptionColor, "回路->注册信息->单回路查询 ");
}else{
TextRender_string24(Lv.Caption.Left + 10, Lv.Caption.Top +4, clNearWhite, CaptionColor, "Circuit->Registered Information");
}
for(int i=0; i<Lv.Grid.UsingCount; i++)RectFillRender(Lv.Grid.Left[i], Lv.Grid.Top[i], Lv.Grid.Right[i], Lv.Grid.Bottom[i], ItemColor);
DrawLevel1Detail();
if(LanguageEnCn == 0){
TextRender_string24(Lv1Left[0], Lv.Grid.Top[ 1]+ 4, clNearWhite, "地址");
TextRender_string24(Lv1Left[1], Lv.Grid.Top[ 1]+ 4, clNearWhite, "类型");
TextRender_string24(Lv1Left[2], Lv.Grid.Top[ 1]+ 4, clNearWhite, "信息");
TextRender_string24(Lv1Left[3], Lv.Grid.Top[ 1]+ 4, clNearWhite, " 二次码");
TextRender_string24(Lv1Left[4], Lv.Grid.Top[ 1]+ 4, clNearWhite, "分区");
TextRender_string24(Lv1Left[5], Lv.Grid.Top[ 1]+ 4, clNearWhite, " 注释");
}else{
TextRender_string24(Lv1Left[0], Lv.Grid.Top[ 1]+ 4, clNearWhite, "Addr");
TextRender_string24(Lv1Left[1], Lv.Grid.Top[ 1]+ 4, clNearWhite, "Type");
TextRender_string24(Lv1Left[2], Lv.Grid.Top[ 1]+ 4, clNearWhite, "Info");
TextRender_string24(Lv1Left[3], Lv.Grid.Top[ 1]+ 4, clNearWhite, " AuxID");
TextRender_string24(Lv1Left[4], Lv.Grid.Top[ 1]+ 4, clNearWhite, "Zone");
TextRender_string24(Lv1Left[5], Lv.Grid.Top[ 1]+ 4, clNearWhite, " Note");
}
}
void TListViewDevice::DrawSelfLevel2(void)
{
RectFillRender(Lv.Caption.Left, Lv.Caption.Top, Lv.Caption.Right, Lv.Caption.Bottom, CaptionColor);
if(LanguageEnCn == 0){
TextRender_string24(Lv.Caption.Left + 10, Lv.Caption.Top +4, clNearWhite, CaptionColor, "回路->注册信息->单回路查询->部件数据");
}else{
TextRender_string24(Lv.Caption.Left + 10, Lv.Caption.Top +4, clNearWhite, CaptionColor, "Loop->Registered Information->Single Loop->Device");
}
for(int i=0; i<Lv.Grid.UsingCount; i++)RectFillRender(Lv.Grid.Left[i], Lv.Grid.Top[i], Lv.Grid.Right[i], Lv.Grid.Bottom[i], ItemColor);
}
void TListViewDevice::DrawLevel1Detail(void)
{
RectFillRender(Lv.Grid.Left[0], Lv.Grid.Top[0], Lv.Grid.Right[0], Lv.Grid.Bottom[0], ItemColor);
TMyString::sClear(Text);
if(LanguageEnCn==0)TMyString::sFromStr("回路号", Text);
else TMyString::sFromStr("Loop:", Text);
TMyString::sAddOn2Dg(Items[0].Path+1,Text);
TextRender_string24(Lv1Left[0], Lv.Grid.Top[ 0]+ 4, clNearWhite, Text);
TMyString::sClear(Text);
if(LanguageEnCn==0)TMyString::sFromStr("机器号", Text);
else TMyString::sFromStr("CTRL:", Text);
TMyString::sAddOn2Dg(MainCtl.fData.Split.MyNum,Text);
if(LanguageEnCn==0)TMyString::sAddOnStr("本机", Text);
else TMyString::sAddOnStr("Local", Text);
TextRender_string24(Lv.Grid.Left[ 0]+ 200, Lv.Grid.Top[ 0]+ 4, clNearWhite, Text);
TMyString::sClear(Text);
if(LanguageEnCn==0)TMyString::sFromStr("已注册总点数", Text);
else TMyString::sFromStr("Registered:", Text);
int Cnt =0;
for(int i=0; i<250; i++){
if( (Port[Items[0].Path].ExistTable[i] == 0xA5) && (Port[Items[0].Path].dTypeTable[i] != 0) ){
Cnt++;
}
}
TMyString::sAddOn3Dg(Cnt,Text);
if(LanguageEnCn==0)TMyString::sAddOnStr(" 未注册总点数",Text);
else TMyString::sAddOnStr(" UnReg:",Text);
TMyString::sAddOn3Dg(250-Cnt,Text);
TextRender_string24(Lv.Grid.Left[ 0]+ 410, Lv.Grid.Top[ 0]+ 4, clNearWhite, ItemColor, Text);
}
void TListViewDevice::DrawCaption(void)
{
Caption.Show();
}
void TListViewDevice::DrawCaption2(void)
{
//SText.Show();
}
void TListViewDevice::GetTypeAndCount()
{
int i;
unsigned char aP0,aT;
if(ItemEnter.Path0 == 0)return;
for(i=0; i<256; i++){
TypeAndCount[i] = 0;
}
if(ItemEnter.Path0 < 41){
aP0 = ItemEnter.Path0 - 1;
for(i=0; i<256; i++){
//if(EpDev[aP0][i].fData.Split.Id){
//aT = EpDev[aP0][i].fData.Split.dType;
//TypeAndCount[aT]++;
//}
}
TypeCount = 0;
for(i=0; i<256; i++){
if(TypeAndCount[i] != 0)TypeCount++;
}
TypeCountPageCount = TypeCount / 30 +1;
TypeCountIndex = 0;
}
}
int TListViewDevice::FindStartPoint()
{
int i;
TypeCountIndex = TypeCountPageIndex *30;
for(i=0;i<256;i++){
if(TypeAndCount[i] != 0){
return i;
}
}
return -1;
}
void TListViewDevice::CheckNewLine(int aLen)
{
if( (DrawX + aLen) > HLineTextRight ){
DrawY = DrawY + HSpace;
DrawX = Content.Left +6;
}
}
void TListViewDevice::ShowTypeList(unsigned char aP0, unsigned char Type1, unsigned char Type2, int Is2Type, char *p, int tLen)
{
int i,ToDraw, Addr, DrawText ,Path,ThisLen, aFrom, Found, NewLine;
if(aP0 == 0)return;
if(aP0 >40) return;
LastDrawX = -1;
LastDrawY = -1;
Path = aP0 -1;
ToDraw = 0;
DrawText =0;
Found = 0;
for(i=0; i<251; i++){
if(Is2Type){
if( (Port[Path].ExistTable[i] == 0xA5) && (( Port[Path].dTypeTable[i] == Type1) || (Port[Path].dTypeTable[i] == Type2) )){
Addr = i + 1;
if(Found == 0){
aFrom = i + 1;
Found = 1;
}
}else{
if(Found){
if(aFrom == Addr){
//Show One Addr
ToDraw = 1;
}else{
//Show Multi Addr
ToDraw = 2;
}
}
Found = 0;
}
}else{
if( (Port[Path].ExistTable[i] == 0xA5) && ( Port[Path].dTypeTable[i] == Type1 )){
Addr = i + 1;
if(Found == 0){
aFrom = i + 1;
Found = 1;
}
}else{
if(Found){
if(aFrom == Addr){
//Show One Addr
ToDraw = 1;
}else{
//Show Multi Addr
ToDraw = 2;
}
}
Found = 0;
}
}
if(i == 250){
if(Found){
if(aFrom == Addr){
//Show One Addr
ToDraw = 1;
}else{
//Show Multi Addr
ToDraw = 2;
}
}
Found = 0;
}
if(ToDraw){
if(DrawText == 0){
CheckNewLine(tLen);
TextRender_string24(DrawX,DrawY,clNearBlack, p);
DrawX = DrawX + tLen;
DrawText = 1;
}
if(ToDraw == 1){
if(Addr > 99){
ThisLen = 3 * 12;
}else
if(Addr >9){
ThisLen = 2 * 12;
}else{
ThisLen = 1 * 12;
}
CheckNewLine(ThisLen);
TextDigitRenderLeft24_1t3(DrawX,DrawY,clNearBlack,Addr);
DrawX = DrawX + ThisLen;
ThisLen = 1 *12;
CheckNewLine(ThisLen);
TextRender_string24(DrawX,DrawY,clNearBlack, ",");
LastDrawX = DrawX;
LastDrawY = DrawY;
DrawX = DrawX + ThisLen;
}else
if(ToDraw == 2){
if(aFrom > 99){
ThisLen = 3 * 12;
}else
if(aFrom >9){
ThisLen = 2 * 12;
}else{
ThisLen = 1 * 12;
}
CheckNewLine(ThisLen);
TextDigitRenderLeft24_1t3(DrawX,DrawY,clNearBlack,aFrom);
DrawX = DrawX + ThisLen;
//_________________________
ThisLen = 1 *12;
CheckNewLine(ThisLen);
TextRender_string24(DrawX,DrawY,clNearBlack, "~");
DrawX = DrawX + ThisLen;
//_________________________
if(Addr > 99){
ThisLen = 3 * 12;
}else
if(Addr >9){
ThisLen = 2 * 12;
}else{
ThisLen = 1 * 12;
}
CheckNewLine(ThisLen);
TextDigitRenderLeft24_1t3(DrawX,DrawY,clNearBlack,Addr);
DrawX = DrawX + ThisLen;
ThisLen = 1 *12;
CheckNewLine(ThisLen);
TextRender_string24(DrawX,DrawY,clNearBlack, ",");
LastDrawX = DrawX;
LastDrawY = DrawY;
DrawX = DrawX + ThisLen;
}
ToDraw = 0;
}
}
if(DrawText){
if(LastDrawX >0){
TextRender_string24(LastDrawX,LastDrawY,clNearBlack, Color, " ");
if( (LastDrawX + 36) < HLineTextRight){
TextRender_string24(LastDrawX,LastDrawY,clNearBlack, Color, " ");
DrawX = DrawX + 32;
}else{
DrawY = DrawY + HSpace;
DrawX = Content.Left +6;
}
}
TypeCharHasShow = 1;
}
}
void TListViewDevice::ClearSpliteCount()
{
Count.Smoke =0;
Count.Tempe =0;
Count.HandReport =0;
Count.HydKp =0;
Count.ModuleInput =0;
Count.ModuleInOut =0;
Count.ModuleOutput =0;
Count.Va =0;
Count.FDisplay =0;
Count.cOther =0;
Count.SmokeTempe = 0;
Count.Tt = 0;
}
void TListViewDevice::GetSpliteCount(unsigned char aP0)
{
unsigned int sPath0,sPath1,aType0,aType1;
int i, j;
unsigned int aIndex, aCount;
unsigned char aType;
ClearSpliteCount();
if(aP0 == 0) return;
if(aP0 > dPORT_MAX_COUNT)return;
i = aP0-1;
if(MainCtl.fData.Split.ExistTablePort[i] == 0xA5){
for(j=0; j<250; j++){
if(Port[i].ExistTable[j] == 0xA5){
aType = Port[i].dTypeTable[j];
//if( (Port[i].StateTable[j] & (dEpStateBitFault + dEpStateBitMask)) == 0) {
if(1){
if(aType == 0){
//Count.cOther++;
//Count.Tt++;
}else
if( (aType == dgTYPE_SMOKE_DETECTOR) ){
Count.Smoke++;
Count.Tt++;
}else
if( aType == dgTYPE_TEMPE_DETECTOR ){
Count.Tempe++;
Count.Tt++;
}else
if( (aType == dgTYPE_HAND_REPORT ) ){
Count.HandReport++;
Count.Tt++;
}else
if( (aType == dgTYPE_FIRE_HydrantKp ) ){
Count.HydKp++;
Count.Tt++;
}else
if( (aType == dgTYPE_IN_MODULE ) ){
Count.ModuleInput++;
Count.Tt++;
}else
if( (aType == dgTYPE_INOUT_MODULE_NonSource) ||
(aType == dgTYPE_INOUT_MODULE_Source) ){
Count.ModuleInOut++;
Count.Tt++;
}else
if( (aType == dgTYPE_OUT_MODULE) ){
Count.ModuleOutput++;
Count.Tt++;
}else
if( (aType == dgType_VAALRAM ) ){
Count.Va++;
Count.Tt++;
}else
if( aType == dgTYPE_DISPLAY_PAD ){
Count.FDisplay++;
Count.Tt++;
}else
if(aType == dgTYPE_SMOKE_TEMPE_DETECTOR ){
Count.SmokeTempe++;
Count.Tt++;
}else{
Count.cOther++;
Count.Tt++;
}
}
}
}
}
}
void TListViewDevice::ShowFig(unsigned char aP0)
{
RectFillRender(Content.Left, Content.Top+42, Content.Right, Content.Bottom, Color);
TextRender_string24(Content.Left+20, Content.Top+42 + 0*32 , clNearBlack, "烟感:" );
TextRender_string24(Content.Left+20, Content.Top+42 + 1*32 , clNearBlack, "温感:" );
TextRender_string24(Content.Left+20, Content.Top+42 + 2*32 , clNearBlack, "输入模块:" );
TextRender_string24(Content.Left+20, Content.Top+42 + 3*32 , clNearBlack, "输出模块:" );
TextRender_string24(Content.Left+20, Content.Top+42 + 4*32 , clNearBlack, "手报:" );
TextRender_string24(Content.Left+20, Content.Top+42 + 5*32 , clNearBlack, "消钮:" );
TextRender_string24(Content.Left+20, Content.Top+42 + 6*32 , clNearBlack, "输入输出模块:" );
TextRender_string24(Content.Left+20, Content.Top+42 + 7*32 , clNearBlack, "层显:" );
TextRender_string24(Content.Left+20, Content.Top+42 + 8*32 , clNearBlack, "声光警报器:" );
TextRender_string24(Content.Left+20, Content.Top+42 + 9*32 , clNearBlack, "其他:" );
TextDigitRender3Right24(Content.Left+200, Content.Top+42 + 0*32 ,clNearBlack, Count.Smoke);
TextDigitRender3Right24(Content.Left+200, Content.Top+42 + 1*32 ,clNearBlack, Count.Tempe);
TextDigitRender3Right24(Content.Left+200, Content.Top+42 + 2*32 ,clNearBlack, Count.ModuleInput);
TextDigitRender3Right24(Content.Left+200, Content.Top+42 + 3*32 ,clNearBlack, Count.ModuleOutput);
TextDigitRender3Right24(Content.Left+200, Content.Top+42 + 4*32 ,clNearBlack, Count.HandReport);
TextDigitRender3Right24(Content.Left+200, Content.Top+42 + 5*32 ,clNearBlack, Count.HydKp);
TextDigitRender3Right24(Content.Left+200, Content.Top+42 + 6*32 ,clNearBlack, Count.ModuleInOut);
TextDigitRender3Right24(Content.Left+200, Content.Top+42 + 7*32 ,clNearBlack, Count.FDisplay);
TextDigitRender3Right24(Content.Left+200, Content.Top+42 + 8*32 ,clNearBlack, Count.Va);
TextDigitRender3Right24(Content.Left+200, Content.Top+42 + 9*32 ,clNearBlack, Count.cOther);
TextRender_string24(Content.Left+420, Content.Top+42 + 0*32 , clNearBlack, "烟温一体:" );
TextDigitRender3Right24(Content.Left+600, Content.Top+42 + 0*32 ,clNearBlack, Count.SmokeTempe);
}
void TListViewDevice::ShowCount(unsigned char aP0)
{
DrawX = Content.Left +6;
DrawY = Content.Top + 42;
//dgTYPE_SMOKE_DETECTOR,
//dgTYPE_TEMPE_DETECTOR,
//dgTYPE_HAND_REPORT,
//dgTYPE_FIRE_hydrant_Kp,
//dgTYPE_IN_MODULE,
//dgTYPE_OUT_MODULE,
//dgTYPE_INOUT_MODULE_NonSource,
//dgTYPE_INOUT_MODULE_Source,
//dgType_VAALRAM,
//dgTYPE_DISPLAY_PAD
RectFillRender(Content.Left, Content.Top+42, Content.Right, Content.Bottom, Color);
TypeCharHasShow = 0;
if(MainCtl.fData.Split.ExistTablePort[aP0-1] == 0xA5){
ShowTypeList(aP0, dgTYPE_SMOKE_DETECTOR, 0, 0, "烟感:", 5*12);
ShowTypeList(aP0, dgTYPE_TEMPE_DETECTOR, 0, 0, "温感:", 5*12);
ShowTypeList(aP0, dgTYPE_IN_MODULE, 0, 0, "输入模块:", 9*12);
ShowTypeList(aP0, dgTYPE_OUT_MODULE, 0, 0, "输出模块:", 9*12);
ShowTypeList(aP0, dgTYPE_HAND_REPORT, 0, 0, "手报:", 5*12);
ShowTypeList(aP0, dgTYPE_FIRE_HydrantKp, 0, 0, "消钮:", 5*12);
ShowTypeList(aP0, dgTYPE_INOUT_MODULE_NonSource, dgTYPE_INOUT_MODULE_Source, 1, "输入输出模块:", 13*12);
ShowTypeList(aP0, dgTYPE_DISPLAY_PAD, 0, 0, "层显:", 5*12);
ShowTypeList(aP0, dgType_VAALRAM, 0, 0, "声光警报器:", 11*12);
ShowTypeList(aP0, dgTYPE_SMOKE_TEMPE_DETECTOR, 0, 0, "烟温一体:", 5*12);
}
if(TypeCharHasShow == 0){
TextRender_string24(Content.Left, Content.Top+42, clNearBlack, "本回路未挂载终端设备" );
}
}
void TListViewDevice::DrawList(void)
{
int i,t,x,y;
unsigned int tAddr;
unsigned int ExistCnt, cnt, aP0, aP1, dType;
if(Tag.ViewingLevel == 0){
for(i=0, t=Items[0].TopInx; (i<8) && (t<Items[0].Count); i++, t++){
aP0 = Items[0].Item[t];
//Draw Port Num
TextDigitRender2Right24(Lv0Left[0], Lv.Grid.Top[i+2] + 4, clNearWhite, ItemColor, aP0+1);
//Draw Registed
ExistCnt = 0;
for(x=0; x<250; x++){
if( (Port[aP0].ExistTable[x] == 0xA5) && Port[aP0].dTypeTable[x])ExistCnt++;
}
TextDigitRender3Right24(Lv0Left[1], Lv.Grid.Top[i+2] + 4, clNearWhite, ItemColor, ExistCnt);
//Draw UnRegisted
TextDigitRender3Right24(Lv0Left[2], Lv.Grid.Top[i+2] + 4, clNearWhite, ItemColor, 250 - ExistCnt);
//Draw Mask
cnt =0;
for(x=0; x<250; x++){
if(Port[aP0].StateTable[x] & dEpStateBitMask)cnt++;
}
TextDigitRender3Right24(Lv0Left[3], Lv.Grid.Top[i+2] + 4, clNearWhite, ItemColor, cnt);
//Draw Percent
cnt = ExistCnt * 1000 / 250;
TextDigitRender3Right24(Lv0Left[4], Lv.Grid.Top[i+2] + 4, clNearWhite, ItemColor, cnt/10);
TextRender_string24(Lv0Left[4]+36, Lv.Grid.Top[i+2] + 4, clNearWhite, "." );
TextDigitRender1Right24(Lv0Left[4]+48, Lv.Grid.Top[i+2] + 4, clNearWhite, ItemColor, cnt%10);
TextRender_string24(Lv0Left[4]+62, Lv.Grid.Top[i+2] + 4, clNearWhite, "%" );
}
}else
if(Tag.ViewingLevel == 1){
aP0 = Items[0].Path;
for(i=0, t=Items[1].TopInx; i<8; i++, t++){
if( t<dEP_MAX_COUNT_PER_PORT){
aP1 = t+1;
//Draw Addr
TextDigitRender3Right24(Lv1Left[0], Lv.Grid.Top[i+2] + 4, clNearWhite, ItemColor, aP1);
//Draw Type
dType = Port[aP0].dTypeTable[t];
if( (Port[aP0].ExistTable[t] == 0xA5) && dType){
if(LanguageEnCn == 0)TMyString::sFromStr(StrHwType[dType],Text);
else TMyString::sFromStr(StrHwTypeEn[dType],Text);
TMyString::sFillFixLen(Text,8);
TMyString::sBrokeFixLen(Text,8);
TextRender_string24(Lv1Left[1]-16, Lv.Grid.Top[i+2] + 4, clNearWhite, ItemColor, Text);
//Draw State
if(LanguageEnCn == 0){
if(Port[aP0].StateTable[t] & dEpStateBitFire)TMyString::sFromStr("报警",Text);
else if(Port[aP0].StateTable[t] & dEpStateBitStart)TMyString::sFromStr("启动",Text);
else if(Port[aP0].StateTable[t] & dEpStateBitFeedBack)TMyString::sFromStr("反馈",Text);
else if(Port[aP0].StateTable[t] & dEpStateBitFault)TMyString::sFromStr("故障",Text);
else if(Port[aP0].StateTable[t] & dEpStateBitSv)TMyString::sFromStr("监管",Text);
else if(Port[aP0].StateTable[t] & dEpStateBitMask)TMyString::sFromStr("屏蔽",Text);
else TMyString::sFromStr("正常",Text);
}else{
if(Port[aP0].StateTable[t] & dEpStateBitFire)TMyString::sFromStr("Fire",Text);
else if(Port[aP0].StateTable[t] & dEpStateBitStart)TMyString::sFromStr("Act",Text);
else if(Port[aP0].StateTable[t] & dEpStateBitFeedBack)TMyString::sFromStr("FBCK",Text);
else if(Port[aP0].StateTable[t] & dEpStateBitFault)TMyString::sFromStr("Fail",Text);
else if(Port[aP0].StateTable[t] & dEpStateBitSv)TMyString::sFromStr("SV",Text);
else if(Port[aP0].StateTable[t] & dEpStateBitMask)TMyString::sFromStr("Mask",Text);
else TMyString::sFromStr("Idle",Text);
}
TextRender_string24(Lv1Left[2], Lv.Grid.Top[i+2] + 4, clNearWhite, ItemColor, Text);
}else{
TextRender_string24(Lv1Left[1]-16, Lv.Grid.Top[i+2] + 4, clNearWhite, ItemColor, " ---- ");
TextRender_string24(Lv1Left[2], Lv.Grid.Top[i+2] + 4, clNearWhite, ItemColor, " -- ");
}
//Draw UserCode
TMyString::sClear(Text);
TMyString::sAddOn8Dg(Port[aP0].UcList[t].Full, Text);
TextRender_string24(Lv1Left[3], Lv.Grid.Top[i+2] + 4, clNearWhite, ItemColor, Text);
//Draw Area
cnt = Port[aP0].Area[t];
TextRender_string24 (Lv1Left[4], Lv.Grid.Top[i+2] + 4, clNearWhite, ItemColor, " ");
TextDigitRender4Right24 (Lv1Left[4], Lv.Grid.Top[i+2] + 4, clNearWhite, ItemColor, cnt);
//Draw Descp
TMyString::sClear(Text);
if( (aP0 <= dPORT_MAX_COUNT) && (t < 250) ){
tAddr = dAddrSdRam_Descp + (aP0 * 256 * 32) + (t * 32);
for(int g=0; g<32; g++){
Text[g] = *(volatile unsigned char *)(tAddr + g);
if( (Text[g] == '\0') || (Text[g] == 0) ){
break;
}
}
Text[32] = '\0';
Text[33] = '\0';
TMyString::sFillFixLen(Text, 32);
}else{
TMyString::sFillFixLen(Text, 32);
}
TextRender_string24(Lv1Left[5], Lv.Grid.Top[i+2] + 4, clNearWhite, ItemColor, Text);
}else{
TextRender_string24(Lv1Left[0], Lv.Grid.Top[i+2] + 4, clNearWhite, ItemColor, " ");
TextRender_string24(Lv1Left[1]-16, Lv.Grid.Top[i+2] + 4, clNearWhite, ItemColor, " ");
TextRender_string24(Lv1Left[2], Lv.Grid.Top[i+2] + 4, clNearWhite, ItemColor, " ");
TextRender_string24(Lv1Left[3], Lv.Grid.Top[i+2] + 4, clNearWhite, ItemColor, " ");
TextRender_string24(Lv1Left[4], Lv.Grid.Top[i+2] + 4, clNearWhite, ItemColor, " ");
TMyString::sClear(Text);
TMyString::sFillFixLen(Text, 32);
TextRender_string24(Lv1Left[5], Lv.Grid.Top[i+2] + 4, clNearWhite, ItemColor, Text);
}
}
}
}
void TListViewDevice::Show(void)
{
DrawSelfLevel0();
DrawList();
Check4SelectedLv0();
IsShow = 1;
}
void TListViewDevice::ReDraw(void)
{
Caption.Enable = 1;
DrawCaption();
DrawList();
IsShow = 1;
}
void TListViewDevice::FullRedraw(int Prm)
{
if(Prm == 0){
RenderBackGround();
if(Tag.ViewingLevel == 0){
DrawSelfLevel0();
DrawList();
Check4SelectedLv0();
}else
if(Tag.ViewingLevel == 1){
DrawSelfLevel1();
DrawList();
Check4SelectedLv1();
}else
if(Tag.ViewingLevel == 2){
if(DevProperty != nullptr){
DevProperty->FullRedraw(Prm);
}
}
}else
if(Prm == 1){
RectFillRender(GuiRedrawDataList[1][0], GuiRedrawDataList[1][1], GuiRedrawDataList[1][2], GuiRedrawDataList[1][3], Color);
Caption.Enable = 1;
if(Tag.ViewingLevel == 0){
DrawSelfLevel0();
DrawList();
Check4SelectedLv0();
}else
if(Tag.ViewingLevel == 1){
DrawSelfLevel1();
DrawList();
Check4SelectedLv1();
}else
if(Tag.ViewingLevel == 2){
if(DevProperty != nullptr){
DevProperty->FullRedraw(Prm);
}
}
}
}
void TListViewDevice::ShowCircuitDet()
{
if(IsPath0Found){
TextRender_string24(Content.Left + 200,Content.Top + 4,clNearBlack, Color, " " );
TextRender_string24(Content.Left + 260,Content.Top + 4,clNearBlack, Color, "设备数量: " );
TextDigitRender3Right24(Content.Left + 368,Content.Top + 4,clNearBlack, Count.Tt);
TextRender_string24(Content.Left + 540,Content.Top + 4,clNearBlack, "左右键切换显示内容" );
}else{
TextRender_string24(Content.Left + 200,Content.Top + 4,clNearBlack, Color, "此回路未登记 " );
TextRender_string24(Content.Left + 540,Content.Top + 4,clNearBlack, Color, " " );
}
}
void TListViewDevice::CalcIconDrawPrm(void)
{
}
TGuiMsgReturn TListViewDevice::QueryKeyIn(unsigned char aKey)
{
TGuiMsgReturn aMsg;
aMsg = DevProperty->KeyIn(aKey);
if(aMsg == guiMsgReturn){
return guiMsgReturn;
}
return guiMsgNone;
}
TGuiMsgReturn TListViewDevice::EditKeyIn(unsigned char aKey)
{
TGuiMsgReturn aMsg;
//editting
return guiMsgNone;
}
void TListViewDevice::ClearSelectedLv0(void)
{
int iT;
iT = Tag.Level[0].Inx + 2;
if(iT > 9)return;
RectFillRender(Lv.Grid.Left[iT], Lv.Grid.Top[iT], Lv.Grid.Left[iT] + Lv.Grid.Right[iT], Lv.Grid.Top[iT] + 3, ItemColor); //draw rectangle
RectFillRender(Lv.Grid.Left[iT], Lv.Grid.Top[iT], Lv.Grid.Left[iT] + 3, Lv.Grid.Bottom[iT], ItemColor); //draw rectangle
RectFillRender(Lv.Grid.Right[iT] -3, Lv.Grid.Top[iT], Lv.Grid.Right[iT], Lv.Grid.Bottom[iT], ItemColor); //draw rectangle
RectFillRender(Lv.Grid.Left[iT], Lv.Grid.Bottom[iT] -3, Lv.Grid.Right[iT], Lv.Grid.Bottom[iT], ItemColor); //draw rectangle
}
void TListViewDevice::Check4SelectedLv0(void)
{
int iT;
iT = Tag.Level[0].Inx + 2;
if(iT > 9)return;
RectFillRender(Lv.Grid.Left[iT], Lv.Grid.Top[iT], Lv.Grid.Left[iT] + Lv.Grid.Right[iT], Lv.Grid.Top[iT] + 3, clBlue); //draw rectangle
RectFillRender(Lv.Grid.Left[iT], Lv.Grid.Top[iT], Lv.Grid.Left[iT] + 3, Lv.Grid.Bottom[iT], clBlue); //draw rectangle
RectFillRender(Lv.Grid.Right[iT] -3, Lv.Grid.Top[iT], Lv.Grid.Right[iT], Lv.Grid.Bottom[iT], clBlue); //draw rectangle
RectFillRender(Lv.Grid.Left[iT], Lv.Grid.Bottom[iT] -3, Lv.Grid.Right[iT], Lv.Grid.Bottom[iT], clBlue); //draw rectangle
}
void TListViewDevice::ClearSelectedLv1(void)
{
int iT;
iT = Tag.Level[1].Inx + 2;
if(iT > 9)return;
RectFillRender(Lv.Grid.Left[iT], Lv.Grid.Top[iT], Lv.Grid.Left[iT] + Lv.Grid.Right[iT], Lv.Grid.Top[iT] + 3, ItemColor); //draw rectangle
RectFillRender(Lv.Grid.Left[iT], Lv.Grid.Top[iT], Lv.Grid.Left[iT] + 3, Lv.Grid.Bottom[iT], ItemColor); //draw rectangle
RectFillRender(Lv.Grid.Right[iT] -3, Lv.Grid.Top[iT], Lv.Grid.Right[iT], Lv.Grid.Bottom[iT], ItemColor); //draw rectangle
RectFillRender(Lv.Grid.Left[iT], Lv.Grid.Bottom[iT] -3, Lv.Grid.Right[iT], Lv.Grid.Bottom[iT], ItemColor); //draw rectangle
}
void TListViewDevice::Check4SelectedLv1(void)
{
int iT;
iT = Tag.Level[1].Inx + 2;
if(iT > 9)return;
RectFillRender(Lv.Grid.Left[iT], Lv.Grid.Top[iT], Lv.Grid.Left[iT] + Lv.Grid.Right[iT], Lv.Grid.Top[iT] + 3, clBlue); //draw rectangle
RectFillRender(Lv.Grid.Left[iT], Lv.Grid.Top[iT], Lv.Grid.Left[iT] + 3, Lv.Grid.Bottom[iT], clBlue); //draw rectangle
RectFillRender(Lv.Grid.Right[iT] -3, Lv.Grid.Top[iT], Lv.Grid.Right[iT], Lv.Grid.Bottom[iT], clBlue); //draw rectangle
RectFillRender(Lv.Grid.Left[iT], Lv.Grid.Bottom[iT] -3, Lv.Grid.Right[iT], Lv.Grid.Bottom[iT], clBlue); //draw rectangle
}
TGuiMsgReturn TListViewDevice::KeyIn(unsigned char aKey)
{
int ind,i,aIndex, Found;
unsigned char aP0;
TGuiMsgReturn aMsg = guiMsgNone;
TGuiMsgReturn aMsg2Rtn = guiMsgNone;
//Up or Down One Index___________________
if(Tag.ViewingLevel == 0){
if(VK_LEFT ==aKey){
}else
if(VK_RIGHT == aKey){
}else
if(VK_UP == aKey){
if(Tag.Level[0].Inx >0){
ClearSelectedLv0();
Tag.Level[0].Inx--;
Items[0].Inx--;
Items[0].Path = Items[0].Item[Items[0].Inx];
Check4SelectedLv0();
}else{
if(Items[0].Inx >0){
Items[0].Inx--;
Items[0].Path = Items[0].Item[Items[0].Inx];
Items[0].TopInx = Items[0].Inx;
DrawList();
}
}
}else
if(VK_DOWN == aKey){
if(Tag.Level[0].Inx < 7){
if(Items[0].Inx < (Items[0].Count-1)){
ClearSelectedLv0();
Tag.Level[0].Inx++;
Items[0].Inx++;
Items[0].Path = Items[0].Item[Items[0].Inx];
Check4SelectedLv0();
}
}else{
Tag.Level[0].Inx = 7;
if(Items[0].Inx < (Items[0].Count-1)){
Items[0].Inx++;
Items[0].Path = Items[0].Item[Items[0].Inx];
Items[0].TopInx++;
if(Items[0].TopInx <0)Items[0].TopInx =0;
DrawList();
}
}
}else
if(aKey == VK_TAB){
}else
if(aKey == VK_EXECUTE){
//Open path Device
if(Items[0].Count > 0){
if(Items[0].Inx < Items[0].Count){
if(Items[0].Path < dPORT_MAX_COUNT){
Tag.ViewingLevel = 1;
Tag.Level[1].Inx = 0;
Items[1].TopInx = 0;
Items[1].Inx = 0;
Items[1].Path = Items[1].Inx;
RenderBackGround();
DrawSelfLevel1();
DrawList();
Check4SelectedLv1();
}
}
}
}else
if(aKey == VK_RETURN){
aMsg = guiMsgReturn;
}else{
}
}else
if(Tag.ViewingLevel == 1){
if(VK_LEFT ==aKey){
int GoInx;
if(Items[1].TopInx <1){
GoInx = 248;
Items[1].Inx = GoInx;
Items[1].TopInx = GoInx;
}else{
GoInx = (Items[1].Inx / 8 -1) * 8;
if(GoInx <0)GoInx = 0;
Items[1].Inx = GoInx;
Items[1].TopInx = GoInx;
}
Items[1].Path = Items[1].Inx;
DrawList();
ClearSelectedLv1();
Tag.Level[1].Inx = 0;
Check4SelectedLv1();
}else
if(VK_RIGHT == aKey){
int GoInx;
GoInx = (Items[1].Inx / 8 +1) * 8;
if(GoInx > 248)GoInx = 0;
Items[1].Inx = GoInx;
Items[1].TopInx = GoInx;
Items[1].Path = Items[1].Inx;
DrawList();
ClearSelectedLv1();
Tag.Level[1].Inx = 0;
Check4SelectedLv1();
}else
if(VK_UP == aKey){
if(Tag.Level[1].Inx >0){
ClearSelectedLv1();
Tag.Level[1].Inx--;
Items[1].Inx--;
Items[1].Path = Items[1].Inx;
Check4SelectedLv1();
}else{
if(Items[1].Inx >0){
Items[1].Inx--;
Items[1].TopInx = Items[1].Inx;
Items[1].Path = Items[1].Inx;
DrawList();
}
}
}else
if(VK_DOWN == aKey){
if(Tag.Level[1].Inx < 7){
if(Items[1].Inx < (dEP_MAX_COUNT_PER_PORT-1)){
ClearSelectedLv1();
Tag.Level[1].Inx++;
Items[1].Inx++;
Items[1].Path = Items[1].Inx;
Check4SelectedLv1();
}
}else{
Tag.Level[1].Inx = 7;
if(Items[1].Inx < (dEP_MAX_COUNT_PER_PORT-1)){
Items[1].TopInx++;
Items[1].Inx++;
Items[1].Path = Items[1].Inx;
DrawList();
}
}
}else
if(aKey == VK_TAB){
}else
if(aKey == VK_EXECUTE){
this->DevProperty->Init(TDevProperty::htNoType, 1);
this->DevProperty->aPanel = this->aPanel;
this->DevProperty->IList = this->IList;
this->DevProperty->IList->RealtimeData.Reset();
this->DevProperty->IList->TextOutClear();
this->DevProperty->SetPath(MainCtl.fData.Split.MyNum, Items[0].Path+1, Items[1].Path+1);
this->DevProperty->Show();
this->DevProperty->Init4DType();
this->DevProperty->DrawCommonInfTitle();
this->DevProperty->RenewCommonInf();
Tag.ViewingLevel = 2;
}else
if(aKey == VK_RETURN){
Tag.ViewingLevel = 0;
DrawSelfLevel0();
DrawList();
Check4SelectedLv0();
}else{
}
}else
if(Tag.ViewingLevel == 2){
aMsg2Rtn = this->DevProperty->KeyIn(aKey);
if(aMsg2Rtn == guiMsgReturn){
Tag.ViewingLevel = 1;
RenderBackGround();
DrawSelfLevel1();
DrawList();
Check4SelectedLv1();
}
}
//____________________________________________________________________<- List View
return aMsg;
}
void TListViewDevice::ClearPath(void)
{
ListView.TopIndex = 0;
}
void TListViewDevice::ClearPath1(void)
{
ListView.TopIndex = 0;
}
void TListViewDevice::LoadPath0Item()
{
for(int i=0; i<dPORT_MAX_COUNT; i++){
Items[0].Item[i] = 0;
}
Items[0].Count = 0;
for(int i=0; i<dPORT_MAX_COUNT; i++){
if(MainCtl.fData.Split.ExistTablePort[i] == 0xA5){
Items[0].Item[Items[0].Count] = i;
Items[0].Count++;
}
}
ListView.SelectedCol = 0;
ListView.TopIndex = 0;
Items[0].Inx = 0;
Items[0].Path = Items[0].Item[Items[0].Inx];
}
void TListViewDevice::LoadPath1Item(TEpDevice *pItem )
{
}
void TListViewDevice::LoadPath0(void)
{
int i;
for(i=0; i<dPORT_MAX_COUNT; i++){
if(MainCtl.fData.Split.ExistTablePort[i] == 0xA5);
}
ListView.SelectedCol = 0;
ListView.TopIndex = 0;
Items[0].Inx = 0;
}
void TListViewDevice::LoadPath1(unsigned char aP0)
{
TRootDevice *theRDev;
TPort *thePort;
unsigned int i, px;
ItemEnter.Path0 = 0;
if(aP0 == 0){
return;
}
if(aP0 >40){
return;
}
aP0--;
theRDev = &Port[aP0];
if(theRDev->fData.Common.dType == dgTYPE_PORT){
px = theRDev->fData.Port.Id;
if(px){
ItemEnter.Path0 = px;
px--;
thePort = (TPort *)theRDev;
ClearPath1();
for(i=0; i< dEP_MAX_COUNT_PER_PORT; i++){
if(Port[px].ExistTable[i] == 0xA5)
LoadPath1Item(&EpDev[px][i]);
}
}
}
ListView.SelectedCol = 0;
ListView.TopIndex = 0;
}
void TListViewDevice::SetEditMode(unsigned int aMode)
{
EditMode = aMode;
}