Improved Simple Gadgets Part 4

You can post your code snippets here for others to use and learn from
Post Reply
User avatar
Redlion
Posts: 94
Joined: Sun Jul 10, 2011 5:05 am
Location: Perth, Western Australia

Improved Simple Gadgets Part 4

Post by Redlion »

Hi all,

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
( Save as G_Frame.hws )

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 
(Save as G_ImageButton.hws )

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    
Thats it for the time being, sorry to spread it over so many posts but my internet is not stable at the moment.

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
----------------------------------------------------------------------------------------
Redlion
Sam460 Lite
A4000 A3000 A2000 A1200 A1000 A600 A500 CD32
Post Reply