#ifndef REGISTERMANUAL_H_
#define REGISTERMANUAL_H_

#include "gType.h" 
#include "GraphBase.h"
#include "string.h"
#include "my_string.h"
#include "Device.h"
#include "EpDevice.h"
#include "StaticText.h"
#include "CtlPanel1.h"

class TRegisterManual{
	public:
		static constexpr unsigned short hList[12] = {72,72,72,72,	72,72,34,34,	34,34,34,34};
		static constexpr unsigned short wList[12] = {800,290,290,290,	290,290,290,290,	290,290,290,290};
		static constexpr TLv Lv = {
			.Caption.Left = 0,
			.Caption.Top = 36,
			.Caption.Width = 800,
			.Caption.Heigh = 32,
			.Caption.Right = 800 -0 -1,
			.Caption.Bottom = 36 + 32,
			
			.Grid.Left = {0,0,0,0,	0,0,0,0,	0,0,0,0},
			.Grid.Right = {wList[0]-1,wList[1]-1,wList[2]-1,wList[3]-1,	wList[4]-1,wList[5]-1,wList[6]-1,wList[7]-1,	wList[8]-1,wList[9]-1,wList[10]-1,wList[11]-1},
			.Grid.Top[0] = (36 + 32 +2),
			.Grid.Top[1] = (36 + 32 +2) + (2 + hList[0]),
			.Grid.Top[2] = (36 + 32 +2) + (2 + hList[0]) + (2 + hList[1]),
			.Grid.Top[3] = (36 + 32 +2) + (2 + hList[0]) + (2 + hList[1]) + (2 + hList[2]),
			.Grid.Top[4] = (36 + 32 +2) + (2 + hList[0]) + (2 + hList[1]) + (2 + hList[2]) + (2 + hList[3]),
			.Grid.Top[5] = (36 + 32 +2) + (2 + hList[0]) + (2 + hList[1]) + (2 + hList[2]) + (2 + hList[3]) + (2 + hList[4]),
			.Grid.Top[6] = (36 + 32 +2) + (2 + hList[0]) + (2 + hList[1]) + (2 + hList[2]) + (2 + hList[3]) + (2 + hList[4]) + (2 + hList[5]),
			.Grid.Top[7] = (36 + 32 +2) + (2 + hList[0]) + (2 + hList[1]) + (2 + hList[2]) + (2 + hList[3]) + (2 + hList[4]) + (2 + hList[5]) + (2 + hList[6]),
			.Grid.Top[8] = (36 + 32 +2) + (2 + hList[0]) + (2 + hList[1]) + (2 + hList[2]) + (2 + hList[3]) + (2 + hList[4]) + (2 + hList[5]) + (2 + hList[6]) + (2 + hList[7]),
			.Grid.Top[9] = (36 + 32 +2) + (2 + hList[0]) + (2 + hList[1]) + (2 + hList[2]) + (2 + hList[3]) + (2 + hList[4]) + (2 + hList[5]) + (2 + hList[6]) + (2 + hList[7]) + (2 + hList[8]),
			.Grid.Top[10] = (36 + 32 +2) + (2 + hList[0]) + (2 + hList[1]) + (2 + hList[2]) + (2 + hList[3]) + (2 + hList[4]) + (2 + hList[5]) + (2 + hList[6]) + (2 + hList[7]) + (2 + hList[8]) + (2 + hList[9]),
			.Grid.Top[11] = (36 + 32 +2) + (2 + hList[0]) + (2 + hList[1]) + (2 + hList[2]) + (2 + hList[3]) + (2 + hList[4]) + (2 + hList[5]) + (2 + hList[6]) + (2 + hList[7]) + (2 + hList[8]) + (2 + hList[9]) + (2 + hList[10]),
				
			.Grid.Bottom[0] = (36 + 32 +2) + hList[0],
			.Grid.Bottom[1] = (36 + 32 +2) + (2 + hList[0]) + hList[1],
			.Grid.Bottom[2] = (36 + 32 +2) + (2 + hList[0]) + (2 + hList[1]) + hList[2],
			.Grid.Bottom[3] = (36 + 32 +2) + (2 + hList[0]) + (2 + hList[1]) + (2 + hList[2]) + hList[3],
			.Grid.Bottom[4] = (36 + 32 +2) + (2 + hList[0]) + (2 + hList[1]) + (2 + hList[2]) + (2 + hList[3]) + hList[4],
			.Grid.Bottom[5] = (36 + 32 +2) + (2 + hList[0]) + (2 + hList[1]) + (2 + hList[2]) + (2 + hList[3]) + (2 + hList[4]) + hList[5],
			.Grid.Bottom[6] = (36 + 32 +2) + (2 + hList[0]) + (2 + hList[1]) + (2 + hList[2]) + (2 + hList[3]) + (2 + hList[4]) + (2 + hList[5]) + hList[6],
			.Grid.Bottom[7] = (36 + 32 +2) + (2 + hList[0]) + (2 + hList[1]) + (2 + hList[2]) + (2 + hList[3]) + (2 + hList[4]) + (2 + hList[5]) + (2 + hList[6]) + hList[7],
			.Grid.Bottom[8] = (36 + 32 +2) + (2 + hList[0]) + (2 + hList[1]) + (2 + hList[2]) + (2 + hList[3]) + (2 + hList[4]) + (2 + hList[5]) + (2 + hList[6]) + (2 + hList[7]) + hList[8],
			.Grid.Bottom[9] = (36 + 32 +2) + (2 + hList[0]) + (2 + hList[1]) + (2 + hList[2]) + (2 + hList[3]) + (2 + hList[4]) + (2 + hList[5]) + (2 + hList[6]) + (2 + hList[7]) + (2 + hList[8]) + hList[9],
			.Grid.Bottom[10] = (36 + 32 +2) + (2 + hList[0]) + (2 + hList[1]) + (2 + hList[2]) + (2 + hList[3]) + (2 + hList[4]) + (2 + hList[5]) + (2 + hList[6]) + (2 + hList[7]) + (2 + hList[8]) + (2 + hList[9]) + hList[10],
			.Grid.Bottom[11] = (36 + 32 +2) + (2 + hList[0]) + (2 + hList[1]) + (2 + hList[2]) + (2 + hList[3]) + (2 + hList[4]) + (2 + hList[5]) + (2 + hList[6]) + (2 + hList[7]) + (2 + hList[8]) + (2 + hList[9]) + (2 + hList[10]) + hList[11],
			
			.Grid.UsingCount = 5,
			
			.Panel.Active = 1,
			.Panel.ItemType = piMemo,
			.Panel.Left = wList[1] + 6,
			.Panel.Top = (36 + 32 +2) + hList[0] +6,
			.Panel.Width = 502,
			.Panel.Heigh = 250,
			.Panel.Right = wList[1] + 6 + 502 -1,
			.Panel.Bottom = (36 + 32 +2) + hList[0] +6 + 250 -1,
			
			.PanelSmall.Active = 1,
			.PanelSmall.Left = wList[1] + 6,
			.PanelSmall.Top = (36 + 32 +2) + hList[0] +6 + 250 -1 + 1,
			.PanelSmall.Width = 502,
			.PanelSmall.Heigh = 42,
			.PanelSmall.Right = wList[1] + 6 + 502 -1,
			.PanelSmall.Bottom = (36 + 32 +2) + hList[0] +6 + 250 -1 + 1 + 42 -1,
		};

	public:
		class TItemList	*IList;
		struct{
			unsigned char InxMin;
			unsigned char InxMax;
			unsigned char Inx;
			void Reset(){
				Inx = 0;
				InxMin = 0;
				InxMax =11;
			}
		}Tag;
		unsigned char LastSta;
	
		TMyString Str;
		
		unsigned char IsPermission;
		unsigned char PermissionCmd;
		unsigned char IsViewList;
		unsigned char ShowingResultOdd;
		
		//Hardware Type
		unsigned int HtListIndex;
		unsigned int HtEntryCount;
		unsigned int HtPageCount;
		
		//Assign Type 
		unsigned int AtListIndex;
		unsigned int AtEntryCount;
		unsigned int AtPageCount;
		
		//Area 
		unsigned int AreaListIndex;
		unsigned int AreaEntryCount;
		unsigned int AreaPageCount;
	
		unsigned char Data[8];
		unsigned char RecData[8];
	
		//unsigned char ExistTable[256];
		//unsigned char TypeTable[256];
		
		int IsOnGo;
		int IsOnShow;
		
		unsigned char IsWait4Rpy;
		unsigned char IsAdd;
		unsigned char IsRecData;
		unsigned char TimeOut;
		
		unsigned char P0;
		unsigned char P1Start;
		unsigned char P1End;
		unsigned char IsAllTypeModify;
		unsigned char TypeToBeModify;
		unsigned char NewHardwareType;
		unsigned char List4What;
		
		unsigned int UserCode;
		unsigned char NewAssignType;
		unsigned char SignalInputType;
		unsigned int Pitch;
		
		unsigned int AuxId;
		unsigned char AssignType;
		unsigned char Signal;
		unsigned short ZoneID;
		struct {
			unsigned char AuxId;
			unsigned char Zone;
			unsigned char AssignType;
			unsigned char Signal;
			void Reset(){
				AuxId =0;
				Zone = 0;
				AssignType = 0;
				Signal = 0;
			}
		}Cover;
		
		union{
			unsigned char D8[256];
			unsigned short D16[128];
			unsigned int  D32[64];
		}ReadWriteData;
		char TextDrawCount[16];
	private:
		void SetListColWidth(int w0, int w1, int w2, int w3, int w4,int w5,int w6, int w7, int w8, int w9);
	public:
		TRegisterManual(){};
		TRegisterManual(int x1, int y1, int aW, int aH, int OwnerX, int OwnerY, u32 aColor){
			Init();
		}
		void Init();
		
		void LoadHwTypeListStr();
		void LoadAssignTypeListStr();	
		void LoadAreaInf();
		
		void DelayMs(unsigned int aMs);
	
		void RenderBackGround(void);
		void RenderBackGround(unsigned int aClr);
		void DrawSelf(void);
		void DrawCommonByExReturn();
		void PermissionCmdReturnDraw();
		void RedrawSta();
		void DrawListDetail();
		void DrawFixText();
		
		void ShowHardwareTypeList();
		void ShowAssignTypeList();
		void ShowAreaList();
		void ShowCoverAuxId();	//1 Cover ,0 ignore
		void ShowCoverZone();
		void ShowCoverAssignType();
		void ShowCoverSignal();
		void ShowCover();

		void Show(void);
		void FullRedraw(int Prm);
		void RedrawModuleInSignalInType();
		
		TGuiMsgReturn KeyIn(unsigned char aKey);
		
		void LoadData();
		void FillRegData();
		
		void ShowWait();
		void PushRecData(unsigned char *p);
		void PermissionCmdGO();
		
		void ClearSelected();
		void Check4Selected(void);
		
		void Task1000Ms();
		
		void SendCmdAddMultAddr(unsigned char aCc, unsigned char sAddr, unsigned char eAddr);
		void SendCmdRemoveMultAddr(unsigned char aCc, unsigned char sAddr, unsigned char eAddr);
		void SendCmdOneAddr(int AddOrRemove);
		
		void SaveToFlash(unsigned char aPath0);	
		int PrepUserCodeAssignTypeData2Write();
		int PrepCheckToRemove();
		
		int ExtRequst(unsigned char Prm);
};



#endif

