#include"gType.h" #include"GraphLow.h" #include"ListBox.h" #define VCNT 10 void TListBoxForm::Init(int aX, int aY, int aW, int aH, int OwnerX, int OwnerY, u16 aBorderWidth, u32 aBorderColor){ unsigned short Left,Right,Top,Bottom, aBW,i; 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; VScrollBarBox.Set(Right-20,Top,Right,Bottom); Content.Set(Left,Top,Right-20,Bottom); SetFontSize(24); Color = clNearWhite; TextColor = clNearBlack; SelectedColor = clAqua; SelectedTextColor = clNearWhite; VScrollBar.Color = 0xFFFF7777; VScrollBar.RibbonColor = 0xFF007777; } void TListBoxForm::SetFontSize(int size) { FontSize = size; FontHeight = GetFontHeight(FontSize); LineHeight = FontHeight + 4; } void TListBoxForm::DrawSelf(void) { //Draw Border 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); } //Fill Rect Box RectFillRender(Content.Left, Content.Top, Content.Right, Content.Bottom, Color); } void TListBoxForm::DrawVertScrollBar(void) { int RibbonHeight; int RibbonBottom; int RibbonTop; int UpRemain; int DownRemain; float f1,f2,f3,f4; if(Items.Count <= VCNT){ RibbonTop = VScrollBarBox.Top+1; RibbonBottom = VScrollBarBox.Bottom - 1; RibbonHeight = VScrollBarBox.Height - 2; }else{ //get RibbonHeight f1 = static_cast(VCNT); f2 = static_cast(Items.Count); f3 = static_cast(VScrollBarBox.Height); f4 = f1/f2*f3; RibbonHeight = static_cast(f4) ; if(RibbonHeight > VScrollBarBox.Height) RibbonHeight = VScrollBarBox.Height; if(RibbonHeight < 10) RibbonHeight = 10; f2 = f4/f1; //Get One Item Height //get RibbonCenter UpRemain = Items.TopIndex; DownRemain = Items.Count - Items.TopIndex - VCNT; if(UpRemain < DownRemain){ f1 = UpRemain; RibbonTop = static_cast(f1*f2) + VScrollBarBox.Top + 1; RibbonBottom = RibbonTop + RibbonHeight; if( RibbonBottom > (VScrollBarBox.Bottom -1) )RibbonBottom = VScrollBarBox.Bottom - 1; }else{ f1 = DownRemain; RibbonBottom = VScrollBarBox.Bottom - static_cast(f1*f2); RibbonTop = RibbonBottom - RibbonHeight; if( RibbonTop < (VScrollBarBox.Top +1) )RibbonTop = VScrollBarBox.Top +1; } } //Draw Vert ScrollBar BackGround RectFillRender(VScrollBarBox.Left, VScrollBarBox.Top, VScrollBarBox.Right, VScrollBarBox.Bottom, VScrollBar.Color); //Draw Vert ScrollBar Ribbon RectFillRender(VScrollBarBox.Left, RibbonTop, VScrollBarBox.Right, RibbonBottom, VScrollBar.RibbonColor); } void TListBoxForm::DrawList(void) { int i,index; for(i=0; i0){ Items.SelectedIndex--; if(Items.SelectedIndex VCNT){ Items.TopIndex = Items.SelectedIndex - VCNT +1; } } }else //Page up or Down____________________________ if(VK_PRIOR == step){ //roll up one page Items.TopIndex = Items.TopIndex - VCNT; if(Items.TopIndex < 0){ Items.TopIndex = 0; Items.SelectedIndex = 0; }else{ Items.SelectedIndex = Items.SelectedIndex - VCNT; if(Items.SelectedIndex < 0)Items.SelectedIndex = 0; } }else if(VK_NEXT == step){ //roll Down one page ind = Items.TopIndex + VCNT; if (ind < Items.Count){ Items.TopIndex = ind; ind = Items.SelectedIndex + VCNT; if(ind >= Items.Count) Items.SelectedIndex = Items.Count - 1; } }else //roll to Top or Bottom if(VK_HOME == step){ //roll up to 0 Index Items.TopIndex = 0; Items.SelectedIndex = 0; }else if(VK_END == step){ //roll down to Tail Items.TopIndex = Items.Count - VCNT + 1; if(Items.TopIndex < 0) Items.TopIndex = 0; Items.SelectedIndex = Items.TopIndex; } } int TListBoxForm::GetTopIndex(void) { return Items.TopIndex; } int TListBoxForm::GetSelectedItemIndex(void) { return Items.SelectedIndex; } void TListBoxForm::SetTextMount(unsigned char *pTextMount, u32 Ind) { if(Ind