Part 4,
(Save as G_Table.hws )
Code: Select all
; ************************************************************************************************
; Gadget Include
; Gadget Table.
; Gadget Type = 9
; By Leo den Hollander
; *************************************************************************************************
Function GadgetTable(GID,x,y,w,h,Text$,Col)
SetFillStyle(#FILLCOLOR)
Box(x, y, w, h, #SILVER)
Box(x+2, y+2, w-22, 21, rgb(160,160,160))
SetFillStyle(#FILLNONE)
Line(x+1, y+1, x+w-2, y+1, #BLACK)
Line(x+1, y+1 ,x+1, y+h-2, #BLACK)
Line(x+w-2, y+1, x+w-2, y+h-2, RGB(224,224,224))
Line(x+1, y+h-2, x+w-2, y+h-2, RGB(224,224,224))
Line(x+W-20, y+2, x+w-20 ,y+h-3, #BLACK)
Line(x+1, y+23, x+w-21, y+23, #BLACK)
Line(x+W-19, y+h-22, x+w-3, y+h-22, #BLACK)
Line(x+W-19, y+h-42, x+w-3, y+h-42, #BLACK)
SetFormStyle(#NORMAL)
SetFormStyle(#ANTIALIAS)
SetFillStyle(#FILLCOLOR)
Polygon(x+w-16,y + h - 38, UpArrow, 4, #RED)
Polygon(x+w-16,y + h - 17, DownArrow, 4, #RED)
SetFormStyle(#NORMAL)
GadgetColumn[GID][0] = 1
GadgetColumn[GID][1] = Col
SetFont(Font,Size)
SetFontColor(FC)
TextOut(x + 4,y + 3,Text$)
MakeButton(GID, #SIMPLEBUTTON, x, y, w, h, Gadget)
GadgetX[GID] = x
GadgetY[GID] = y
GadgetW[GID] = w
GadgetH[GID] = h
GadgetText[GID] = ""
GadgetType[GID] = 9
GadgetState[GID] = 0
GadgetBorder[GID] = 0
GadgetRangeLow[GID] = 1
GadgetRangeHigh[GID] = 1
GadgetGroup[GID] = 0
GadgetItemCount[GID] = 0
GadgetItem[GID][0][0] = ""
GadgetFont[GID] = Font
GadgetFontSize[GID] = Size
GadgetBColor[GID] = BGC
GadgetFColor[GID] = FGC
MaxGadgets = MaxGadgets + 1
EndFunction
Function AddTableColumn(GID, Text$, Col)
Local ColNo = GadgetColumn[GID][0] + 1
GadgetColumn[GID][ColNo] = GadgetColumn[GID][ColNo - 1] + Col
Data$ = Text$
Local TW = TextWidth(Data$)
If TW > Col - 15
While TW > Col - 15
Data$ = UnleftStr(Data$, 1)
TW = TextWidth(Data$)
Wend
Data$ = Data$.."..."
EndIf
SetFillStyle(#FILLCOLOR)
Line(GadgetX[GID]+ GadgetColumn[GID][ColNo-1], GadgetY[GID]+2, GadgetX[GID]+GadgetColumn[GID][ColNo-1], GadgetY[GID]+24, #BLACK)
Line(GadgetX[GID]+ GadgetColumn[GID][ColNo-1], GadgetY[GID]+24, GadgetX[GID]+GadgetColumn[GID][ColNo-1], GadgetY[GID]+GadgetH[GID]-3, #GRAY)
SetFont(Font,Size)
SetFontColor(GadgetFColor[GID])
TextOut(GadgetX[GID] + GadgetColumn[GID][ColNo-1] + 4, GadgetY[GID] + 3, Data$)
GadgetColumn[GID][0] = ColNo
SetFormStyle(#NORMAL)
EndFunction
Function ChangeTableCell(GID, Text$ ,Col, Row)
If Row =< GadgetItemCount[GID]
Gadgetitem[GID][Col][Row] = Text$
SetFillStyle(#FILLCOLOR)
SetFont(Font,Size)
SetFontColor(GadgetFColor[GID])
Box(GadgetX[GID] + 2, GadgetY[GID] + 24, GadgetW[GID] - 23, GadgetH[GID] - 26, GadgetBColor[GID])
Local L = 1
For Local I = GadgetRangeLow[GID] To GadgetRangeHigh[GID]
For C = 1 To GadgetColumn[GID][0]
Data$ = Gadgetitem[GID][C][I]
If C < 2
Local TW = TextWidth(Data$)
If TW > GadgetColumn[GID][1] - 15
While TW > GadgetColumn[GID][1] - 15
Data$ = UnleftStr(Data$, 1)
TW = TextWidth(Data$)
Wend
TextOut(GadgetX[GID]+GadgetColumn[GID][C-1] + 2, GadgetY[GID] + (L * 20) + 5, Data$.."...")
Else
TextOut(GadgetX[GID]+GadgetColumn[GID][C-1] + 2, GadgetY[GID] + (L * 20) + 5, Data$)
EndIf
Else
Line(GadgetX[GID]+GadgetColumn[GID][C-1], GadgetY[GID]+2, GadgetX[GID]+GadgetColumn[GID][C-1], GadgetY[GID]+24, #BLACK)
Line(GadgetX[GID]+GadgetColumn[GID][C-1], GadgetY[GID]+24, GadgetX[GID]+GadgetColumn[GID][C-1], GadgetY[GID]+GadgetH[GID]-3, #GRAY)
Local TW = TextWidth(Data$)
If TW > (GadgetColumn[GID][C] - GadgetColumn[GID][C - 1] )- 16
While TW > (GadgetColumn[GID][C] - GadgetColumn[GID][C - 1]) - 16
Data$ = UnleftStr(Data$, 1)
TW = TextWidth(Data$)
Wend
TextOut(GadgetX[GID] + GadgetColumn[GID][C - 1] + 3, GadgetY[GID] + (L * 20) + 5, Data$.."...")
Else
TextOut(GadgetX[GID] + GadgetColumn[GID][C - 1] + 3, GadgetY[GID] + (L * 20) + 5, Data$)
EndIf
EndIf
Next
L = L + 1
Next
EndIf
SetFormStyle(#NORMAL)
EndFunction
Function AddTableRow(GID,Text$)
Local Row = GadgetItemCount[GID] + 1
array, I = SplitStr(Text$, "|")
For Local Col = 1 To I
Gadgetitem[GID][Col][Row] = array[Col - 1]
Next
GadgetItemCount[GID] = Row
Local Displayheight = Int((GadgetH[GID] - 27) / 20)
If Displayheight > Row
Displayheight = GadgetItemCount[GID]
EndIf
GadgetRangeHigh[GID] = Row
If Row > Displayheight
GadgetRangeHigh[GID] = Displayheight
EndIf
SetFillStyle(#FILLCOLOR)
SetFont(Font,Size)
SetFontColor(GadgetFColor[GID])
Local L = 1
For Local I = GadgetRangeLow[GID] To GadgetRangeHigh[GID]
For Local C = 1 To GadgetColumn[GID][0]
Data$ = Gadgetitem[GID][C][I]
If C < 2
Local TW = TextWidth(Data$)
If TW > GadgetColumn[GID][1] - 15
While TW > GadgetColumn[GID][1] - 15
Data$ = UnleftStr(Data$, 1)
TW = TextWidth(Data$)
Wend
TextOut(GadgetX[GID]+GadgetColumn[GID][C-1] + 2, GadgetY[GID] + (L * 20) + 5, Data$.."...")
Else
TextOut(GadgetX[GID]+GadgetColumn[GID][C-1] + 2, GadgetY[GID] + (L * 20) + 5, Data$)
EndIf
Else
Line(GadgetX[GID]+GadgetColumn[GID][C-1], GadgetY[GID]+2, GadgetX[GID]+GadgetColumn[GID][C-1], GadgetY[GID]+24, #BLACK)
Line(GadgetX[GID]+GadgetColumn[GID][C-1], GadgetY[GID]+24, GadgetX[GID]+GadgetColumn[GID][C-1], GadgetY[GID]+GadgetH[GID]-3, #GRAY)
Local TW = TextWidth(Data$)
If TW > (GadgetColumn[GID][C] - GadgetColumn[GID][C - 1]) - 16
While TW > (GadgetColumn[GID][C] - GadgetColumn[GID][C - 1]) - 16
Data$ = UnleftStr(Data$, 1)
TW = TextWidth(Data$)
Wend
TextOut(GadgetX[GID] + GadgetColumn[GID][C - 1] + 3, GadgetY[GID] + (L * 20) + 5, Data$.."...")
Else
TextOut(GadgetX[GID] + GadgetColumn[GID][C - 1] + 3, GadgetY[GID] + (L * 20) + 5, Data$)
EndIf
EndIf
Next
L = L + 1
Next
If GadgetItemCount[GID] => Int((GadgetH[GID]-27)/20)
Local db = Int((GadgetH[GID] - 46) / 20 )* ((GadgetH[GID] - 46) / GadgetItemCount[GID])
Box(GadgetX[GID] + GadgetW[GID] - 17, GadgetY[GID] + 3, 14, GadgetH[GID] - 46, GadgetBColor[GID])
Box(GadgetX[GID] + GadgetW[GID] - 17, GadgetY[GID] + 3, 14, db, #RED, {roundlevel=25})
Else
Box(GadgetX[GID] + GadgetW[GID] - 17, GadgetY[GID] + 3, 14, GadgetH[GID] - 46, #RED, {roundlevel=25})
EndIf
SetFormStyle(#NORMAL)
EndFunction
Function p_SetTable(id)
Local DPosX = MouseX()
Local DPosY = MouseY()
SetFontColor(GadgetFColor[id])
Displayheight = Int((GadgetH[id]-27)/20)
If Displayheight > GadgetItemCount[id]
Displayheight = GadgetItemCount[id]
EndIf
SelColumn = 0
For WC = 0 To GadgetColumn[id][0]
If DPosX-GadgetX[id] > GadgetColumn[id][WC]
SelColumn = WC+1
EndIf
Next
If DPosX < GadgetX[id]+GadgetW[id]-19
If DPosY > GadgetY[id]+24
If DPosY < GadgetY[id]+24+(Displayheight*20)
SetFillStyle(#FILLCOLOR)
Box(GadgetX[id]+2,GadgetY[id]+24, GadgetW[id]-23, GadgetH[id]-26,GadgetBColor[id])
selected = Int((DposY-(GadgetY[id]+5))/20)
GadgetState[id] = Val(selected+(GadgetRangeLow[id]-1))
SetFillStyle(#FILLCOLOR)
Box(GadgetX[id]+3,GadgetY[id]+5+(selected*20),GadgetW[id]-24,19,#GRAY)
Local L = 1
For Local I = GadgetRangeLow[id] To GadgetRangeHigh[id]
For Local C = 1 To GadgetColumn[id][0]
Data$ = Gadgetitem[id][C][I]
If C < 2
Local TW = TextWidth(Data$)
If TW > GadgetColumn[id][1]-15
While TW > GadgetColumn[id][1]-15
Data$ = UnleftStr(Data$,1)
TW = TextWidth(Data$)
Wend
TextOut(GadgetX[id]+GadgetColumn[id][C-1]+2, GadgetY[id]+(L*20)+5, Data$.."...")
Else
TextOut(GadgetX[id]+GadgetColumn[id][C-1]+2, GadgetY[id]+(L*20)+5, Data$)
EndIf
Else
Line(GadgetX[id]+GadgetColumn[id][C-1],GadgetY[id]+2,GadgetX[id]+GadgetColumn[id][C-1],GadgetY[id]+24,#BLACK)
Line(GadgetX[id]+GadgetColumn[id][C-1],GadgetY[id]+24,GadgetX[id]+GadgetColumn[id][C-1],GadgetY[id]+GadgetH[id]-3,#GRAY)
Local TW = TextWidth(Data$)
If TW > (GadgetColumn[id][C]-GadgetColumn[id][C-1])-16
While TW > (GadgetColumn[id][C]-GadgetColumn[id][C-1])-16
Data$ = UnleftStr(Data$,1)
TW = TextWidth(Data$)
Wend
TextOut(GadgetX[id]+GadgetColumn[id][C-1]+3, GadgetY[id]+(L*20)+5, Data$.."...")
Else
TextOut(GadgetX[id]+GadgetColumn[id][C-1]+3, GadgetY[id]+(L*20)+5, Data$)
EndIf
EndIf
Next
L = L +1
Next
SetFormStyle(#NORMAL)
EndIf
EndIf
EndIf
If DPosX > GadgetX[id] + GadgetW[id] -19
If DPosY > GadgetY[id] + GadgetH[id] -41 And DPosY < GadgetY[id] + GadgetH[id] -20
If GadgetRangeLow[id] > 1
GadgetRangeLow[id] = GadgetRangeLow[id] -1
GadgetRangeHigh[id] = GadgetRangeHigh[id] -1
L = 1
SetFillStyle(#FILLCOLOR)
Box(GadgetX[id]+2,GadgetY[id]+24, GadgetW[id]-23, GadgetH[id]-26,GadgetBColor[id])
For I = GadgetRangeLow[id] To GadgetRangeHigh[id]
If I = GadgetState[id]
Box(GadgetX[id]+2,GadgetY[id]+5+(L)*20,GadgetW[id]-24,19,#GRAY)
EndIf
For Local C = 1 To GadgetColumn[id][0]
Data$ = Gadgetitem[id][C][I]
If C < 2
Local TW = TextWidth(Data$)
If TW > GadgetColumn[id][1]-15
While TW > GadgetColumn[id][1]-15
Data$ = UnleftStr(Data$,1)
TW = TextWidth(Data$)
Wend
TextOut(GadgetX[id]+GadgetColumn[id][C-1]+2, GadgetY[id]+(L*20)+5, Data$.."...")
Else
TextOut(GadgetX[id]+GadgetColumn[id][C-1]+2, GadgetY[id]+(L*20)+5, Data$)
EndIf
Else
Line(GadgetX[id]+GadgetColumn[id][C-1],GadgetY[id]+2,GadgetX[id]+GadgetColumn[id][C-1],GadgetY[id]+24,#BLACK)
Line(GadgetX[id]+GadgetColumn[id][C-1],GadgetY[id]+24,GadgetX[id]+GadgetColumn[id][C-1],GadgetY[id]+GadgetH[id]-3,#GRAY)
Local TW = TextWidth(Data$)
If TW > (GadgetColumn[id][C]-GadgetColumn[id][C-1])-16
While TW > (GadgetColumn[id][C]-GadgetColumn[id][C-1])-16
Data$ = UnleftStr(Data$,1)
TW = TextWidth(Data$)
Wend
TextOut(GadgetX[id]+GadgetColumn[id][C-1]+3, GadgetY[id]+(L*20)+5, Data$.."...")
Else
TextOut(GadgetX[id]+GadgetColumn[id][C-1]+3, GadgetY[id]+(L*20)+5, Data$)
EndIf
EndIf
Next
L = L +1
Next
EndIf
EndIf
If DPosY > GadgetY[id]+GadgetH[id] -19 And DPosY < GadgetY[id]+GadgetH[id] -2
If GadgetRangeHigh[id] < GadgetItemCount[id]
GadgetRangeLow[id] = GadgetRangeLow[id] +1
GadgetRangeHigh[id] = GadgetRangeHigh[id] +1
L = 1
SetFillStyle(#FILLCOLOR)
Box(GadgetX[id]+2,GadgetY[id]+24, GadgetW[id]-23, GadgetH[id]-26,GadgetBColor[id])
For I = GadgetRangeLow[id] To GadgetRangeHigh[id]
If I = GadgetState[id]
Box(GadgetX[id]+2,GadgetY[id]+5+(L)*20,GadgetW[id]-24,19,#GRAY)
EndIf
For Local C = 1 To GadgetColumn[id][0]
Data$ = Gadgetitem[id][C][I]
If C < 2
Local TW = TextWidth(Data$)
If TW > GadgetColumn[id][1]-15
While TW > GadgetColumn[id][1]-15
Data$ = UnleftStr(Data$,1)
TW = TextWidth(Data$)
Wend
TextOut(GadgetX[id]+GadgetColumn[id][C-1]+2, GadgetY[id]+(L*20)+5, Data$.."...")
Else
TextOut(GadgetX[id]+GadgetColumn[id][C-1]+2, GadgetY[id]+(L*20)+5, Data$)
EndIf
Else
Line(GadgetX[id]+GadgetColumn[id][C-1],GadgetY[id]+2,GadgetX[id]+GadgetColumn[id][C-1],GadgetY[id]+24,#BLACK)
Line(GadgetX[id]+GadgetColumn[id][C-1],GadgetY[id]+24,GadgetX[id]+GadgetColumn[id][C-1],GadgetY[id]+GadgetH[id]-3,#GRAY)
Local TW = TextWidth(Data$)
If TW > (GadgetColumn[id][C]-GadgetColumn[id][C-1])-16
While TW > (GadgetColumn[id][C]-GadgetColumn[id][C-1])-16
Data$ = UnleftStr(Data$,1)
TW = TextWidth(Data$)
Wend
TextOut(GadgetX[id]+GadgetColumn[id][C-1]+3, GadgetY[id]+(L*20)+5, Data$.."...")
Else
TextOut(GadgetX[id]+GadgetColumn[id][C-1]+3, GadgetY[id]+(L*20)+5, Data$)
EndIf
EndIf
Next
L = L +1
Next
EndIf
EndIf
SetFillStyle(#FILLCOLOR)
If GadgetItemCount[id] => Int((GadgetH[id]-27)/20)
local displaybarheight = (Int((GadgetH[id]-46)/20)*((GadgetH[id]-46)/ GadgetItemCount[id]))
local blankbarheight = (GadgetH[id]-46)-displaybarheight
local sh = ( (GadgetRangeLow[id]-1)*(blankbarheight/((GadgetItemCount[id]-1)-Int((GadgetH[id]-46)/20)) ))
box(GadgetX[id]+GadgetW[id]-17,GadgetY[id]+3, 14,GadgetH[id]-46,GadgetBColor[id])
box(GadgetX[id]+GadgetW[id]-17,GadgetY[id]+4+(sh), 14, displaybarheight-1,#red,{roundlevel=25})
Endif
SetFormStyle(#NORMAL)
EndIf
EndFunction
Code: Select all
; ************************************************************************************************
; Gadget Include
; Gadget Frame - Display.
; Gadget Type = 11
; By Leo den Hollander
; *************************************************************************************************
Function GadgetFrame(GID, x, y, w, h, Text$, Border)
If Border = 0
SetFillStyle(#FILLNONE)
Box(x, y + 9, w, h, BGC)
ElseIf Border = 1
SetFillStyle(#FILLNONE)
Box(x, y + 8, w, h, BGC)
Box(x + 2, y + 10, w - 4, h - 4, BGC)
EndIf
SetFont(Font,Size)
SetFontColor(FGC)
SetFillStyle(#FILLCOLOR)
Box(x + 3, y, TextWidth(Text$) + 5, TextHeight(Text$), ScreenC)
TextOut(x + 5, y, Text$)
GadgetX[GID] = x
GadgetY[GID] = y
GadgetW[GID] = w
GadgetH[GID] = h
GadgetText[GID] = Text$
GadgetType[GID] = 11
GadgetState[GID] = 0
GadgetBorder[GID] = 0
GadgetRangeLow[GID] = 0
GadgetRangeHigh[GID] = 0
GadgetGroup[GID] = 0
GadgetItemCount[GID] = 0
GadgetItem[GID][0][0] = ""
GadgetFont[GID] = Font
GadgetFontSize[GID] = Size
GadgetBColor[GID] = BGC
GadgetFColor[GID] = FGC
MaxGadgets = MaxGadgets + 1
EndFunction
Code: Select all
; ************************************************************************************************
; Gadget Include
; Gadget Imagebutton - Input.
; Gadget Type = 13
; By Leo den Hollander
; *************************************************************************************************
Function GadgetButtonImage(GID, x, y, w, h, File$)
SetLineWidth(1)
SetFillStyle(#FILLCOLOR)
Box(x, y, w, h, #SILVER)
SetFillStyle(#FILLNONE)
Line(x+1, y+1, x+w-2, y+1, RGB(224,224,224))
Line(x+1, y+1, x+1, y+h-2, RGB(224,224,224))
Line(x+w-2, y+1, x+w-2, y+h-2, #BLACK)
Line(x+1, y+h-2, x+w-2, y+h-2, #BLACK)
LoadBrush(GID, File$)
DisplayBrush(GID,x + 3, y + 3, {width = w-6, height = h-6})
MakeButton(GID, #SIMPLEBUTTON, x + 3, y + 3, w - 6, h - 6, Button)
GadgetX[GID] = x
GadgetY[GID] = y
GadgetW[GID] = w
GadgetH[GID] = h
GadgetText[GID] = Text$
GadgetType[GID] = 13
GadgetState[GID] = 0
GadgetBorder[GID] = 0
GadgetRangeLow[GID] = 0
GadgetRangeHigh[GID] = 0
GadgetGroup[GID] = 0
GadgetItemCount[GID] = 0
GadgetItem[GID][0][0] = ""
GadgetFont[GID] = Font
GadgetFontSize[GID] = Size
GadgetBColor[GID] = BGC
GadgetFColor[GID] = FGC
MaxGadgets = MaxGadgets + 1
EndFunction
There are a few small issues that I will need to address, but from what testing I have done it seems usable.
I will try and get the panel gadget working, but it is proving to be a little difficult to do without layers.
Most of the code should be easy to follow.
Give it a try and let me know if it works for you.
Regards
Leo