Initial commit
This commit is contained in:
344
MyCode/Gui/EditML.cpp
Normal file
344
MyCode/Gui/EditML.cpp
Normal file
@@ -0,0 +1,344 @@
|
||||
|
||||
#include "gType.h"
|
||||
#include"GraphLow.h"
|
||||
#include"EditML.h"
|
||||
|
||||
|
||||
void TEditML::Init(int aX, int aY, int aW, int aH, int OwnerX, int 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);
|
||||
|
||||
Enable = true;
|
||||
FlickDominance = true;
|
||||
FlickTick = 0;
|
||||
Pst = -1;
|
||||
|
||||
MaxLen = 256;
|
||||
LineSpacing = 4;
|
||||
SetLineSpacing(LineSpacing);
|
||||
}
|
||||
|
||||
void TEditML::SetLineSpacing(int aSpacing)
|
||||
{
|
||||
int aN, aS;
|
||||
LineSpacing = aSpacing;
|
||||
aN = Content.Width / 12;
|
||||
aS = Content.Width % 12;
|
||||
if(aS < 3){
|
||||
OneLineTextCount = aN -1;
|
||||
}else{
|
||||
OneLineTextCount = aN;
|
||||
}
|
||||
LineNum = Content.Height /24;
|
||||
}
|
||||
|
||||
void TEditML::SetText(char *p, int aFontSize)
|
||||
{
|
||||
Str.FromStr(p);
|
||||
FontSize = aFontSize;
|
||||
}
|
||||
|
||||
void TEditML::SetText(const char *p, int aFontSize)
|
||||
{
|
||||
Str.FromStr(p);
|
||||
FontSize = aFontSize;
|
||||
}
|
||||
|
||||
void TEditML::TextClear(void)
|
||||
{
|
||||
Str.Text[0]=0;
|
||||
Str.Text[1]=0;
|
||||
Pst = -1;
|
||||
ReDraw();
|
||||
}
|
||||
|
||||
void TEditML::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 TEditML::ReDraw(void)
|
||||
{
|
||||
int i,x,y, xCnt, yCnt, Inx, cpPst;
|
||||
unsigned int tClr, bClr;
|
||||
TmpChar[0] = 0;
|
||||
TmpChar[1] = 0;
|
||||
TmpChar[2] = 0;
|
||||
TmpChar[3] = 0;
|
||||
if(Enable){
|
||||
if(Selected){
|
||||
bClr = SelectedColor;
|
||||
tClr = SelectedTextColor;
|
||||
}else{
|
||||
bClr = Color;
|
||||
tClr = TextColor;
|
||||
}
|
||||
}else{
|
||||
bClr = clFrmFace;
|
||||
tClr = clGray;
|
||||
}
|
||||
RectFillRender(Content.Left, Content.Top, Content.Right, Content.Bottom, bClr);
|
||||
x = Content.Left + 2;
|
||||
y = Content.Top + 1;
|
||||
xCnt = 0;
|
||||
yCnt = 0;
|
||||
Inx = 0;
|
||||
if(Pst == -1){
|
||||
if(Enable && Selected && IsShowCursor)
|
||||
VertLineRender(x , y, 24, tClr);
|
||||
}
|
||||
for(i=0; i<dMYLONGSTRING_LENGTH; i++){
|
||||
if(Str.Text[Inx] != 0){
|
||||
if( (Str.Text[Inx] & 0x80) == 0){
|
||||
TmpChar[0] = Str.Text[Inx];
|
||||
TmpChar[1] = 0;
|
||||
TextRender_string24(x, y, tClr, TmpChar);
|
||||
if( Inx == Pst){
|
||||
if(Enable && Selected && IsShowCursor)
|
||||
VertLineRender(x + 12 +1, y, 24, tClr);
|
||||
}
|
||||
x += 12;
|
||||
xCnt++;
|
||||
Inx++;
|
||||
}else{
|
||||
TmpChar[0] = Str.Text[Inx];
|
||||
TmpChar[1] = Str.Text[Inx +1];
|
||||
TmpChar[2] = 0;
|
||||
TextRender_string24(x, y, tClr, TmpChar);
|
||||
if( Inx == Pst){
|
||||
if(Enable && Selected && IsShowCursor)
|
||||
VertLineRender(x + 24 +1, y, 24, tClr);
|
||||
}
|
||||
x += 24;
|
||||
xCnt +=2;
|
||||
Inx +=2;
|
||||
}
|
||||
if( (Str.Text[Inx] & 0x80) == 0){
|
||||
cpPst = OneLineTextCount;
|
||||
}else{
|
||||
cpPst = OneLineTextCount -1;
|
||||
}
|
||||
if(xCnt >= cpPst){
|
||||
xCnt = 0;
|
||||
yCnt++;
|
||||
x = Content.Left + 2;
|
||||
y = y + LineSpacing + 24;
|
||||
if(yCnt >= LineNum)break;
|
||||
}
|
||||
if(Inx >= (dMYLONGSTRING_LENGTH -1))break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TEditML::SetSelect(void)
|
||||
{
|
||||
Selected = 1;
|
||||
ReDraw();
|
||||
}
|
||||
|
||||
void TEditML::SetDeSelect(void)
|
||||
{
|
||||
Selected = 0;
|
||||
FlickDominance = true;
|
||||
FlickTick = 0;
|
||||
Pst = Str.GetEndPst();
|
||||
ReDraw();
|
||||
}
|
||||
|
||||
void TEditML::Show(void)
|
||||
{
|
||||
SelfDraw();
|
||||
}
|
||||
|
||||
void TEditML::KeyIn(unsigned char aKey)
|
||||
{
|
||||
int aEp, aLen;
|
||||
switch(aKey){
|
||||
case VK_DELETE:
|
||||
aEp = Str.Delete(Pst);
|
||||
Pst -= aEp;
|
||||
if(Pst < -1)Pst =-1;
|
||||
break;
|
||||
case VK_LEFT:
|
||||
if(Pst > 0){
|
||||
if( (Str.Text[Pst] & 0x80) == 0){
|
||||
//this is AscII
|
||||
Pst--;
|
||||
}else{
|
||||
Pst -=2;
|
||||
}
|
||||
}else
|
||||
if(Pst >-1){
|
||||
Pst--;
|
||||
}
|
||||
break;
|
||||
case VK_RIGHT:
|
||||
aEp = Str.GetEndPst();
|
||||
if(Pst < (aEp-1)){
|
||||
if( (Str.Text[Pst+1] & 0x80) == 0){
|
||||
//this is AscII
|
||||
Pst++;
|
||||
}else{
|
||||
Pst +=2;
|
||||
}
|
||||
}else
|
||||
if(Pst<aEp){
|
||||
Pst++;
|
||||
}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 == ' '){Str.Insert(" ",Pst); Pst++;}
|
||||
else if(aKey == '='){Str.Insert("=",Pst); Pst++;}
|
||||
else if(aKey == 'Y'){Str.Insert("Y",Pst); Pst++;}
|
||||
else if(aKey == '('){Str.Insert("(",Pst); Pst++;}
|
||||
else if(aKey == ')'){Str.Insert(")",Pst); Pst++;}
|
||||
else if(aKey == '-'){Str.Insert("-",Pst); Pst++;}
|
||||
else if(aKey == '+'){Str.Insert("+",Pst); Pst++;}
|
||||
else if(aKey == '&'){Str.Insert("&",Pst); Pst++;}
|
||||
else if(aKey == 'S'){Str.Insert("S",Pst); Pst++;}
|
||||
else if(aKey == '*'){Str.Insert("*",Pst); Pst++;}
|
||||
else if(aKey == VK_DECIMAL){Str.Insert("*",Pst); Pst++;}
|
||||
else 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 TEditML::OnTime100mS(void)
|
||||
{
|
||||
FlickTick++;
|
||||
if(FlickTick>4){
|
||||
FlickTick = 0;
|
||||
if(FlickDominance){
|
||||
FlickDominance = false;
|
||||
}else{
|
||||
FlickDominance = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TEditML::SetMaxLen(unsigned int aLen)
|
||||
{
|
||||
if(aLen > (dMYLONGSTRING_LENGTH-2)){
|
||||
MaxLen = dMYLONGSTRING_LENGTH-2;
|
||||
}else{
|
||||
MaxLen = aLen;
|
||||
}
|
||||
}
|
||||
|
||||
void TEditML::SetInputMaskEn(void)
|
||||
{
|
||||
InputMethod = EN;
|
||||
}
|
||||
|
||||
void TEditML::SetInputCN(void)
|
||||
{
|
||||
InputMethod = CN;
|
||||
}
|
||||
|
||||
void TEditML::SetPstTail(void)
|
||||
{
|
||||
Pst = Str.GetEndPst();
|
||||
}
|
||||
|
||||
char TEditML::GetLastChar()
|
||||
{
|
||||
int i;
|
||||
char aChr = 0;
|
||||
for(i=0; i<(dMYLONGSTRING_LENGTH-2); i++){
|
||||
if(Str.Text[i] != 0){
|
||||
aChr = Str.Text[i];
|
||||
}else{
|
||||
return aChr;
|
||||
}
|
||||
}
|
||||
return ' ';
|
||||
}
|
||||
|
||||
void TEditML::SetLastChar(char aChr)
|
||||
{
|
||||
int i, aPst;
|
||||
aPst = 0;
|
||||
for(i=0; i<(dMYLONGSTRING_LENGTH-2); i++){
|
||||
if(Str.Text[i] != 0){
|
||||
aPst = i;
|
||||
}else{
|
||||
if(aPst < (dMYLONGSTRING_LENGTH-2)){
|
||||
Str.Text[aPst] = aChr;
|
||||
Str.Text[aPst +1] = 0;
|
||||
}else{
|
||||
Str.Text[aPst] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
char TEditML::GetCurrentChar()
|
||||
{
|
||||
return Str.Text[Pst];
|
||||
}
|
||||
|
||||
void TEditML::SetCurrentChar(char aChr)
|
||||
{
|
||||
Str.Text[Pst] = aChr;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user