BTW - the example shows the windows file explorer. All your ideas are fine, I will play around now. But it will take a while...
(which looks impressive): removed ListEx::#CheckBoxes and changed the column in the example to "0", but an empty column is seen at the moment. Anyhow, the multiline solution is not (absolute) perfect for me: while clicking an item, the text is seen in a single line then and it is not possible to have different font sizes for each text line).
- must also investigate this more deeply...
Found also a fine code from Stargate which could be changed easily to look perfect for me. But key handling (things like 'Tab', Ctrl+Cursor', etc.) and modifying the content (delete or change a single item, etc.) has to be done...
Code: Select all
; Define
EnableExplicit
Enumeration
#FontTitle
#FontTitleSelected
#FontInfo
EndEnumeration
LoadFont(#FontTitle,"Segoe UI",20)
LoadFont(#FontTitleSelected,"Segoe UI",20)
LoadFont(#FontInfo,"Segoe UI",11)
Structure ListImageGadgetOptions
LineCount.i
LineHeight.i
LineWidth.i
Space.i
ImageWidth.i
ImageHeight.i
ImagePos.i
TitleFont.i
TitleFont_.i
InfoFont.i
TitlePos.i
InfoPos.i
ColorBackground.i
ColorCursor.i
ColorTitle.i
ColorInfo1.i
ColorInfo2.i
ColorSelectedText.i
EndStructure
Structure ListImageGadgetItem
Gadget.i
State.i
Title.s
Info1.s
Info2.s
Image.i
BackgroundImage.i
BackgroundImageGadget.i
ImageGadget.i
EndStructure
Global NewList ListImageGadgetItem.ListImageGadgetItem()
Global Options.ListImageGadgetOptions
With Options
\LineCount= 0
\LineHeight= 60
\LineWidth= 540
\Space= 10
\ImageWidth= 60
\ImageHeight=50
\ImagePos= (\LineHeight-\ImageHeight)>>1
\TitleFont= FontID(#FontTitle)
\TitleFont_= FontID(#FontTitleSelected)
\InfoFont= FontID(#FontInfo)
\InfoPos= Options\LineHeight-26
\ColorBackground= #White
\ColorCursor= $F6E0BE
\ColorTitle= $602000
\ColorInfo1= $604020
\ColorInfo2= \ColorInfo1
\ColorSelectedText= $000000
EndWith
; EndDefine
Procedure ListImageGadget(Gadget, x, y, Width, Height)
ScrollAreaGadget(Gadget,x,y,Width,Height,Width-30,1)
CloseGadgetList()
SetGadgetColor(Gadget,#PB_Gadget_BackColor,Options\ColorBackground)
EndProcedure
Procedure SetListImageGadgetItem(*ListImageGadgetItem.ListImageGadgetItem,State,Initialize=#Null)
With *ListImageGadgetItem
If State
StartDrawing(ImageOutput(\BackgroundImage))
Box(0,0,Options\LineWidth,Options\LineHeight,Options\ColorCursor)
DrawAlphaImage(ImageID(\Image),Options\Space,Options\ImagePos)
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(Options\TitleFont_)
DrawText(Options\ImageWidth+Options\Space<<1,Options\TitlePos,\Title,Options\ColorSelectedText)
DrawingFont(Options\InfoFont)
DrawText(Options\ImageWidth+Options\Space<<1,Options\InfoPos,\Info1,Options\ColorSelectedText)
DrawText(Options\LineWidth-Options\Space-TextWidth(\Info2),Options\InfoPos,\Info2,Options\ColorSelectedText)
StopDrawing()
Else
StartDrawing(ImageOutput(\BackgroundImage))
Box(0,0,Options\LineWidth,Options\LineHeight,Options\ColorBackground)
DrawAlphaImage(ImageID(\Image),Options\Space,Options\ImagePos)
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(Options\TitleFont)
DrawText(Options\ImageWidth+Options\Space<<1,Options\TitlePos,\Title,Options\ColorTitle)
DrawingFont(Options\InfoFont)
DrawText(Options\ImageWidth+Options\Space<<1,Options\InfoPos,\Info1,Options\ColorInfo1)
DrawText(Options\LineWidth-Options\Space-TextWidth(\Info2),Options\InfoPos,\Info2,Options\ColorInfo2)
StopDrawing()
EndIf
If Initialize=#Null
SetGadgetState(\BackgroundImageGadget, ImageID(\BackgroundImage))
EndIf
\State = State
EndWith
EndProcedure
Procedure AddListImageGadgetItem(Gadget,Position,Title.s,Info1.s,Info2.s,Image)
With ListImageGadgetItem()
AddElement(ListImageGadgetItem())
\Gadget= Gadget
\State= #False
\Title= Title
\Info1= Info1
\Info2= Info2
\Image = Image
\BackgroundImage = CreateImage(#PB_Any, Options\LineWidth,Options\LineHeight)
SetListImageGadgetItem(ListImageGadgetItem(),0,#True)
OpenGadgetList(Gadget)
\BackgroundImageGadget=ImageGadget(#PB_Any,0,(Options\LineCount)*Options\LineHeight,ImageWidth(\BackgroundImage),ImageHeight(\BackgroundImage),ImageID(\BackgroundImage))
CloseGadgetList()
Options\LineCount+1
SetGadgetAttribute(Gadget,#PB_ScrollArea_InnerHeight,Options\LineCount*Options\LineHeight+2)
EndWith
EndProcedure
Procedure GetListImageGadgetState(Gadget)
Protected Index
ForEach ListImageGadgetItem()
If ListImageGadgetItem()\Gadget = Gadget
If ListImageGadgetItem()\State
ProcedureReturn Index
Break
EndIf
Index + 1
EndIf
Next
EndProcedure
Procedure.s GetListImageGadgetText(Gadget)
ForEach ListImageGadgetItem()
If ListImageGadgetItem()\Gadget = Gadget
If ListImageGadgetItem()\State
ProcedureReturn ListImageGadgetItem()\Title
Break
EndIf
EndIf
Next
EndProcedure
Procedure SetListImageGadgetState(Gadget, State)
Protected Index
ForEach ListImageGadgetItem()
If ListImageGadgetItem()\Gadget = Gadget
If ListImageGadgetItem()\State
SetListImageGadgetItem(ListImageGadgetItem(), #False)
EndIf
If Index = State
SetListImageGadgetItem(ListImageGadgetItem(), #True)
EndIf
Index + 1
EndIf
Next
EndProcedure
Procedure ListImageGadgetCallback(WindowID, Message, wParam, lParam)
Protected *ListImageGadgetItem.ListImageGadgetItem
With ListImageGadgetItem()
If Message=#WM_COMMAND
ForEach ListImageGadgetItem()
If GadgetID(\BackgroundImageGadget) = lParam
SetListImageGadgetItem(ListImageGadgetItem(), #True)
SetActiveGadget(\Gadget)
Break
ElseIf GadgetID(\Gadget) = lParam
SetActiveGadget(\Gadget)
EndIf
Next
If IsGadget(\Gadget)
ForEach ListImageGadgetItem()
If \State = #True And GadgetID(\BackgroundImageGadget) <> lParam
SetListImageGadgetItem(ListImageGadgetItem(), #False)
EndIf
Next
EndIf
ElseIf Message=#WM_KEYFIRST
Select wParam
Case #VK_RETURN
Debug "* "+Str(GetListImageGadgetState(GetActiveGadget()))
If GetKeyState_(#VK_SHIFT)&128
Debug \BackgroundImage
;Debug \BackgroundImageGadget
;CreateImage(ListImageGadgetItem()\BackgroundImageGadget,20,20,32,#Red)
Else
SetListImageGadgetItem(ListImageGadgetItem(),1)
EndIf
Case #VK_UP
If LastElement(ListImageGadgetItem())
Repeat
If GetActiveGadget() = \Gadget And \State = #True
*ListImageGadgetItem = @ListImageGadgetItem()
While PreviousElement(ListImageGadgetItem())
If \Gadget = *ListImageGadgetItem\Gadget
SetListImageGadgetItem(*ListImageGadgetItem, #False)
SetListImageGadgetItem(ListImageGadgetItem(), #True)
If GetGadgetAttribute(\Gadget, #PB_ScrollArea_Y) > GadgetY(\BackgroundImageGadget)-1
SetGadgetAttribute(\Gadget, #PB_ScrollArea_Y, GadgetY(\BackgroundImageGadget)-1)
EndIf
Break
EndIf
Wend
Break
EndIf
Until Not PreviousElement(ListImageGadgetItem())
EndIf
Case #VK_DOWN
If FirstElement(ListImageGadgetItem())
Repeat
If GetActiveGadget() = \Gadget And \State = #True
*ListImageGadgetItem = @ListImageGadgetItem()
While NextElement(ListImageGadgetItem())
If \Gadget = *ListImageGadgetItem\Gadget
SetListImageGadgetItem(*ListImageGadgetItem, #False)
SetListImageGadgetItem(ListImageGadgetItem(), #True)
If GetGadgetAttribute(\Gadget, #PB_ScrollArea_Y) < GadgetY(\BackgroundImageGadget)+GadgetHeight(\BackgroundImageGadget)-GadgetHeight(\Gadget)+5
SetGadgetAttribute(\Gadget, #PB_ScrollArea_Y, GadgetY(\BackgroundImageGadget)+GadgetHeight(\BackgroundImageGadget)-GadgetHeight(\Gadget)+5)
EndIf
Break
EndIf
Wend
Break
EndIf
Until Not NextElement(ListImageGadgetItem())
EndIf
EndSelect
EndIf
EndWith
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
SetWindowCallback(@ListImageGadgetCallback())
OpenWindow(0,0,0,600,440,"-*-",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ListImageGadget(1, 10, 10, 580, 380)
ButtonGadget(2,10,400, 580,30,"Quit")
Define n.i,event.i
For n = 1 To 20
AddListImageGadgetItem(1, -1, "Title "+Str(n),"Information Text",Str(Random(20000)),CreateImage(#PB_Any,Options\ImageWidth,Options\ImageHeight,32,Random(#White)))
Next
SetActiveGadget(1)
SetListImageGadgetState(1,0)
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case 2
End
Debug "[_]"
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case 1
Debug "_/¯"
EndSelect
EndSelect
ForEver