#include "gType.h" #include"GraphLow.h" #include"TEdit.h" const static unsigned char CharStart = '*'; void TEdit::Init(u16 aX, u16 aY, u16 aW, u16 aH, u16 OwnerX, u16 OwnerY, u32 aBorderWidth, u32 aBorderColor) { unsigned short Left,Right,Top,Bottom, aBW; aBW = aBorderWidth; aBW = 2; Bound.SetBySize(aX+OwnerX, aY+OwnerY, aW, aH); OwnerLeftTop.x = OwnerX; OwnerLeftTop.y = OwnerY; Border.Width = aBW; Border.Color = aBorderColor; Left = Bound.Left + aBW; Right = Bound.Right - aBW; Top = Bound.Top + aBW; Bottom = Bound.Bottom - aBW; Content.Set(Left,Top,Right,Bottom); Index = 0; Color = clNearWhite; TextColor = clNearBlack; SelectedColor = clBlue; SelectedTextColor = clNearWhite; SetText("Edit xx", 24); FontSize = 24; Enable = true; FlickDominance = true; FlickTick = 0; Pst = -1; IsShowCursor = 1; MaxLen = 60; CursorMode =0; MaskMode =0; Selected = 0; } void TEdit::SetText(char *p, int aFontSize) { Str.FromStr(p); FontSize = aFontSize; } void TEdit::SetText(const char *p, int aFontSize) { Str.FromStr(p); FontSize = aFontSize; } void TEdit::TextClear(void) { Str.Text[0]=0; Str.Text[1]=0; Pst = -1; ReDraw(); } void TEdit::SelfDraw(void) { if (Border.Width>0){ VertLineRender(Bound.Left, Bound.Top, Bound.Height-1, 0xFF808080); HorizLineRender(Bound.Left, Bound.Top, Bound.Width-1, 0xFF808080); VertLineRender(Bound.Left+1, Bound.Top+1, Bound.Height-2, 0xFF404040); HorizLineRender(Bound.Left+1, Bound.Top+1, Bound.Width-2, 0xFF404040); VertLineRender(Bound.Right-1, Bound.Top+1, Bound.Height-2, 0xFFD4D0C8); HorizLineRender(Bound.Left+1, Bound.Bottom-1, Bound.Width-2, 0xFFD4D0C8); VertLineRender(Bound.Right, Bound.Top, Bound.Height, 0xFFFFFFFF); HorizLineRender(Bound.Left, Bound.Bottom, Bound.Width, 0xFFFFFFFF); } ReDraw(); } void TEdit::CorrectPst() { int aLen = Str.GetEndPst(); if(Pst > aLen) Pst = aLen; } void TEdit::ShowCursor(void) { unsigned int aPst; aPst = (Pst + 1) * 12 +1; VertLineRender(Content.Left + aPst, Bound.Top+2, Bound.Height-3, SelectedTextColor); } void TEdit::ShowCursor(unsigned int aClr) { unsigned int aPst; aPst = (Pst + 1) * 12 +1; VertLineRender(Content.Left + aPst, Bound.Top+2, Bound.Height-3, aClr); } void TEdit::ReDraw(void) { int Len,i; if(FontSize == 16){ }else{ if(Enable){ if(Selected){ RectFillRender(Content.Left, Content.Top, Content.Right, Content.Bottom, SelectedColor); if(MaskMode == CharStart){ Len = Str.GetLength(); for(i=0; i 0){ PrvCharType = 0; const int tPst = Str.GetEndPst(); if(Pst > tPst)Pst = tPst; for(i=0; i<=Pst; i++){ if(Str.Text[i] & 0x80){ PrvCharType = 1; i++; }else{ PrvCharType = 0; } } if( PrvCharType == 0){ //this is AscII Pst--; }else{ Pst -=2; } }else if(Pst >-1){ Pst--; } break; case VK_RIGHT: aEp = Str.GetEndPst(); if(Pst < (aEp)){ if( (Str.Text[Pst+1] & 0x80) == 0){ //this is AscII Pst++; }else{ if((Pst+2)>aEp){ Str.Text[Pst] = 0; Pst --; }else{ Pst +=2; } } }else{ Pst = aEp; } break; } if(InputMethod == EN){ if( (aKey >= VK_0) && (aKey <= VK_9) ){ if(aKey == VK_0)Str.Insert("0",Pst); if(aKey == VK_1)Str.Insert("1",Pst); if(aKey == VK_2)Str.Insert("2",Pst); if(aKey == VK_3)Str.Insert("3",Pst); if(aKey == VK_4)Str.Insert("4",Pst); if(aKey == VK_5)Str.Insert("5",Pst); if(aKey == VK_6)Str.Insert("6",Pst); if(aKey == VK_7)Str.Insert("7",Pst); if(aKey == VK_8)Str.Insert("8",Pst); if(aKey == VK_9)Str.Insert("9",Pst); Pst++; } if(aKey == VK_DECIMAL){Str.Insert("*",Pst); Pst++;} if(aKey == VK_OEM_2){Str.Insert("#",Pst);Pst++;} }else if(InputMethod == CN){ }else{ InputMethod = EN; } Str.Text[MaxLen] = 0; if(Pst >= MaxLen)Pst = MaxLen -1; } void TEdit::OnTime100mS(void) { FlickTick++; if(FlickTick>4){ FlickTick = 0; if(FlickDominance){ FlickDominance = false; }else{ FlickDominance = true; } } } void TEdit::SetMaxLen(unsigned int aLen) { if(aLen > 60){ MaxLen = 60; }else{ MaxLen = aLen; } } void TEdit::SetInputMaskEn(void) { InputMethod = EN; } void TEdit::SetInputCN(void) { InputMethod = CN; } void TEdit::SetPstTail(void) { Pst = Str.GetEndPst(); } void TEdit::sDrawSelf(int x, int y, int w, int h, unsigned int aClr) { VertLineRender (x, y, h-1, 0xFF808080); HorizLineRender(x, y, w-1, 0xFF808080); VertLineRender( x+1, y+1, h-2, 0xFF404040); HorizLineRender(x+1, y+1, w-2, 0xFF404040); VertLineRender(x+w-1-1, y+1, h-2, 0xFFD4D0C8); HorizLineRender(x+1, y+h-1-1, w-2, 0xFFD4D0C8); VertLineRender(x+w-1, y, h, 0xFFFFFFFF); HorizLineRender(x, y+h-1, w, 0xFFFFFFFF); RectFillRender(x+2, y+2, x+w-3, y+h-3, aClr); }