Code: Select all
#SS_NOTIFY=256
#SS_OWNERDRAW=$D
UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTIFFImageDecoder()
UseTGAImageDecoder()
Global PPL
;- Structures and Arrays
Structure PPTinfo
gadgetnumber.l
scrollarea.l
scrollareachild.l
scrollareahandle.l
childimages.l[100]
EndStructure
Dim pptLVstruct.PPTinfo(100)
rect.RECT
Structure FindWindowData
childwindowhandle.l
EndStructure
Structure handle
hwnd.l
EndStructure
NewList FindChild.FindWindowData()
NewList PptLVnumber.handle()
;- Procedures
Procedure.l EnumChildProc(hChild, lParam)
AddElement(FindChild())
FindChild()\childwindowhandle= hChild
ProcedureReturn 1
EndProcedure
Dim PPTimages(500)
Procedure PPTcallback(WindowID,message,wParam,lParam)
;Shared PPL
pptnumber=CountList(PptLVnumber())
For a=0 To pptnumber-1
scrollareachild=pptLVstruct(a)\scrollareachild
scrollareachildfirstchild=GetWindow_(scrollareachild,#GW_CHILD)
scrollareachildnextchild=GetWindow_(scrollareachildfirstchild,#GW_HWNDNEXT)
scrollareachildlastchild=GetWindow_(scrollareachildfirstchild,#GW_HWNDLAST)
ClearList(FindChild())
EnumChildWindows_(scrollareachild, @EnumChildProc(), 0)
Result=#PB_ProcessPureBasicEvents
Select message
Case #WM_COMMAND
ResetList(FindChild())
ForEach FindChild()
Index = ListIndex(FindChild())
If lParam = FindChild()\childwindowhandle
Result=SendMessage_(FindChild()\childwindowhandle ,#BM_GETCHECK,0,0)
SendMessage_(FindChild()\childwindowhandle,#BM_SETCHECK,#BST_CHECKED,0)
ForEach FindChild()
If lParam <> FindChild()\childwindowhandle
SendMessage_(FindChild()\childwindowhandle,#BM_SETCHECK,#BST_UNCHECKED,0)
EndIf
Next
EndIf
Next
EndSelect
Next
ProcedureReturn Result
EndProcedure
Procedure PPtListview(number,x,y,Width,Height,Imagenumber)
AddElement(PptLVnumber())
LVnumber=CountList(PptLVnumber())
Index= LVnumber-1
If Index=number
imagex=5
imagewidth=Width-30
imageheightF.f=imagewidth*(5/7)
imageheightF$=StrF(imageheightF)
Result$ = StringField(imageheightF$, 1,".")
imageheight=Val(Result$)
imagey=0-imageheight
If Imagenumber>4
scrollheight=Imagenumber*(imageheight+10)
Else
scrollheight=600
EndIf
pptLVstruct(Index)\scrollarea=ScrollAreaGadget(#PB_Any, x,y,Width,Height, Width-20,scrollheight, 10)
pptLVstruct(Index)\scrollareachild=GetWindow_(GadgetID(pptLVstruct(Index)\scrollarea),#GW_CHILD)
pptLVstruct(Index)\scrollareahandle=GadgetID(pptLVstruct(Index)\scrollarea)
CreateImage(999,imagewidth, imageheight)
StartDrawing(ImageOutput())
Box(0,0,imagewidth, imageheight,#COLOR_BTNFACE)
StopDrawing()
For a=1 To Imagenumber
imagey=imagey+ 6+ imageheight
pptLVstruct(Index)\childimages[a]=ButtonImageGadget(#PB_Any,imagex,imagey, imagewidth, imageheight, UseImage(999))
style = GetWindowLong_(GadgetID(pptLVstruct(Index)\childimages[a]), #GWL_STYLE)
toggleStyle = style |$1003
SetWindowLong_(GadgetID(pptLVstruct(Index)\childimages[a]), #GWL_STYLE, toggleStyle)
CreateImage(a,imagewidth-10, imageheight-10)
StartDrawing(ImageOutput())
Box(0,0,imagewidth, imageheight,RGB(228,225,227))
StopDrawing()
SetGadgetState(pptLVstruct(Index)\childimages[a],UseImage(a))
Next
CloseGadgetList()
SetWindowCallback(@PPTcallback())
ProcedureReturn @pptLVstruct(Index)
EndIf
EndProcedure
Procedure GetPPTstate(PPTlistview)
scrollareachild=pptLVstruct(PPTlistview)\scrollareachild
ClearList(FindChild())
EnumChildWindows_(scrollareachild, @EnumChildProc(), 0)
ResetList(FindChild())
While NextElement(FindChild())
Index = ListIndex(FindChild())
If SendMessage_(FindChild()\childwindowhandle,#BM_GETCHECK,0,0)=#BST_CHECKED
ProcedureReturn Index+1
Break
Else
EndIf
Wend
EndProcedure
Procedure SetPPTstate(PPTlistview,item,State)
scrollareachild=pptLVstruct(PPTlistview)\scrollareachild
ClearList(FindChild())
EnumChildWindows_(scrollareachild, @EnumChildProc(), 0)
If State =0
ResetList(FindChild())
While NextElement(FindChild())
SendMessage_(FindChild()\childwindowhandle,#BM_SETCHECK,#BST_UNCHECKED,0)
Wend
ElseIf State=1
ResetList(FindChild())
ForEach FindChild()
SendMessage_(FindChild()\childwindowhandle,#BM_SETCHECK,#BST_UNCHECKED,0)
Next
SelectElement(FindChild(),item-1)
SendMessage_(FindChild()\childwindowhandle,#BM_SETCHECK,#BST_CHECKED,0)
EndIf
EndProcedure
Procedure AddPPTitem(PPTlistview,optionalimage)
scrollarea=pptLVstruct(PPTlistview)\scrollarea
scrollareachild=GetWindow_(GadgetID(pptLVstruct(PPTlistview)\scrollarea),#GW_CHILD)
ClearList(FindChild())
EnumChildWindows_(scrollareachild, @EnumChildProc(), 0)
numberimages=CountList(FindChild())
AddElement(FindChild())
imagex=5
Width=GadgetWidth(scrollarea)
y=GadgetY(pptLVstruct(PPTlistview)\childimages[numberimages])
imagewidth=Width-30
imageheightF.f=imagewidth*(5/7)
imageheightF$=StrF(imageheightF)
Result$ = StringField(imageheightF$, 1,".")
imageheight=Val(Result$)
imagey=y+imageheight+5
CreateImage(999,imagewidth, imageheight)
StartDrawing(ImageOutput())
Box(0,0,imagewidth, imageheight,#COLOR_BTNFACE)
StopDrawing()
OpenGadgetList(scrollarea)
pptLVstruct(PPTlistview)\childimages[numberimages+1]=ButtonImageGadget(#PB_Any,imagex,imagey, imagewidth, imageheight, UseImage(999))
style = GetWindowLong_(GadgetID(pptLVstruct(PPTlistview)\childimages[numberimages+1]), #GWL_STYLE)
toggleStyle = style |$1003
SetWindowLong_(GadgetID(pptLVstruct(PPTlistview)\childimages[numberimages+1]), #GWL_STYLE, toggleStyle)
If CreateImage(numberimages+1,imagewidth-10, imageheight-10)
StartDrawing(ImageOutput())
Box(0,0,imagewidth, imageheight,RGB(228,225,227))
StopDrawing()
SetGadgetState(pptLVstruct(PPTlistview)\childimages[numberimages+1],UseImage(numberimages+1))
EndIf
CloseGadgetList()
If numberimages>4
scrollheight=(numberimages+1)*(imageheight+10)
SetGadgetAttribute(scrollarea,#PB_ScrollArea_InnerHeight,scrollheight)
EndIf
If optionalimage <> 0 Or optionalimage <>#Null
numberimages=CountList(FindChild())
imagewidth=GadgetWidth(PPTimages(numberimages+1))
imageheight=GadgetHeight(PPTimages(numberimages+1))
ResizeImage(optionalimage,imagewidth,imageheight)
SetGadgetState(pptLVstruct(PPTlistview)\childimages[numberimages+1],UseImage(optionalimage))
EndIf
EndProcedure
Procedure CountPPTitems(PPTlistview)
scrollareachild=GetWindow_(GadgetID(pptLVstruct(PPTlistview)\scrollarea),#GW_CHILD)
ClearList(FindChild())
EnumChildWindows_(scrollareachild, @EnumChildProc(), 0)
itemcount=CountList(FindChild())
ProcedureReturn itemcount
EndProcedure
Procedure DeletePPTitem(PPTlistview,item)
EndProcedure
Procedure SetPPTitemImage(PPTlistview,item,Image)
scrollareachild=pptLVstruct(PPTlistview)\scrollareachild
ClearList(FindChild())
EnumChildWindows_(scrollareachild, @EnumChildProc(), 0)
numberimages=CountList(FindChild())
imagewidth=GadgetWidth(pptLVstruct(PPTlistview)\childimages[numberimages])
imageheight=GadgetHeight(pptLVstruct(PPTlistview)\childimages[numberimages])
ResizeImage(Image,imagewidth,imageheight)
SetGadgetState(pptLVstruct(PPTlistview)\childimages[item],UseImage(Image))
EndProcedure
Procedure GetPPTitemImage(PPTlistview,item)
If item=0
Else
imagewidth=GadgetWidth(pptLVstruct(PPTlistview)\childimages[item])
imageheightF.f=imagewidth*(5/7)
imageheightF$=StrF(imageheightF)
Result$ = StringField(imageheightF$, 1,".")
imageheight=Val(Result$)
Width=imagewidth*3
Height=imageheight*3
imagehandle=SendMessage_(GadgetID(pptLVstruct(PPTlistview)\childimages[item]),#BM_GETIMAGE,#IMAGE_BITMAP,0)
imagereturn=CreateImage(#PB_Any,Width,Height)
StartDrawing(ImageOutput())
DrawImage(imagehandle,0,0,Width,Height)
StopDrawing()
EndIf
ProcedureReturn imagereturn
EndProcedure
;-Main Program
OpenWindow(0,0,0,600,600,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"PPTlistview Test")
CreateGadgetList(WindowID(0))
PPL=PPtListview(0,10,10,190,300,4)
lll=PPtListview(1,10,320,190,200,3)
ButtonGadget(8,250,40,150,20,"Grab Selected Image")
ButtonGadget(7,250,70,150,20,"Add Image To First Item")
ButtonGadget(1,250,100,150,20,"Get PPTLv State")
ButtonGadget(2,250,130,150,20,"Set PPTLv State To 0")
ButtonGadget(3,250,160,150,20,"Set PPTLv State To 2")
ButtonGadget(5,250,190,150,20,"Add PPTlv Item")
ButtonGadget(6,250,220,150,20,"Count PPTlv Items")
ImageGadget(4,250,250,280,210,0,#PB_Image_Border)
;-Event Loop
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
SetWindowCallback(0)
End
Case #PB_Event_Gadget
Select EventGadgetID()
Case 1
State=GetPPTstate(0)
MessageRequester("Info","The PPT Listview State is " + Str(State))
Case 2
SetPPTstate(0,0,0)
Case 3
SetPPTstate(0,2,1)
Case 5
AddPPTitem(0,0)
Case 6
number=CountPPTitems(0)
MessageRequester("Info" ,"There are" + " " + Str(number) + " "+"Items In the PPT Listview")
Case 7
Filename$ = OpenFileRequester("Choose an Image", "", "All Images Formats|*.bmp;*.jpg;*.png;*.tif;*.tga", 0)
If Filename$
currentimage=LoadImage(#PB_Any,Filename$)
SetPPTitemImage(0,1,currentimage)
EndIf
Case 8
currentimage=GetPPTitemImage(0,GetPPTstate(0))
ResizeImage(currentimage,GadgetWidth(4)-4,GadgetHeight(4)-4)
SetGadgetState(4,UseImage(currentimage))
Case PPL
Debug "ok"
EndSelect
EndSelect
ForEver