Module Tree for PureBasic

Share your advanced PureBasic knowledge/code with the community.
User avatar
microdevweb
Enthusiast
Enthusiast
Posts: 179
Joined: Fri Jun 13, 2014 9:38 am
Location: Belgique

Module Tree for PureBasic

Post by microdevweb »

Hello all,

Look the sample

Image

For testing dowload the module :arrow:
http://www.microdevweb.com/source/Tree/PBTree_1.5.zip

Or

Run this code after save this (sample: launch.pb)

Code: Select all

If FileSize("Tree.pbi")=-1
      InitNetwork()
      If ReceiveHTTPFile("http://www.microdevweb.com/source/Tree/Tree.pbi","Tree.pbi")=0
            MessageRequester("Http Error","I can not load the Tree.pbi")
            End
      EndIf
EndIf

Copy and run this code (note: the image it's render by http)

Code: Select all

XIncludeFile "Tree.pbi"
Enumeration 
      #MainForm
      #TreeA
      #TreeB
      #TreeC
EndEnumeration
Enumeration       
      #TP_item
      #Tp_SubItem
      #Tp_Text
EndEnumeration
Global gWF,gHF,gTreeD,*IcoTable,*IcoLabel,*IcoEdit
Procedure FillsTreeA()
      Protected N,Txt$,R,I,Id
      For N=1 To 4
            Txt$="Item "
            Tree::AddItem(#TreeA,-1,Txt$+Str(N),*IcoTable,0)
            Tree::SetData(#TreeA,Id,#TP_item,-1)
            Id+1
            For R=1 To 5
                  Txt$="Sub Item "
                  Tree::AddItem(#TreeA,-1,Txt$+Str(N),*IcoLabel,1)
                  Tree::SetData(#TreeA,Id,#Tp_SubItem,-1)
                  Id+1
                  For I=1 To 6
                        Txt$="Text "
                        Tree::AddItem(#TreeA,-1,Txt$+Str(N),0,2) 
                        Tree::DisableCheckBox(#TreeA,Id,#False)
                        Tree::SetData(#TreeA,Id,#Tp_Text,I)
                        Id+1
                  Next
            Next
      Next
      Tree::Draw(#TreeA)
EndProcedure
Procedure FillsTreeB()
      Protected N,Txt$,R,I,Id
      For N=1 To 4
            Txt$="Item "
            Tree::AddItem(#TreeB,-1,Txt$+Str(N),*IcoTable,0)
            Tree::SetData(#TreeB,Id,#TP_item,-1)
            Id+1
            For R=1 To 5
                  Txt$="Sub Item "
                  Tree::AddItem(#TreeB,-1,Txt$+Str(N),*IcoLabel,1)
                  Tree::SetData(#TreeB,Id,#Tp_SubItem,-1)
                  Id+1
                  For I=1 To 6
                        Txt$="Text "
                        Tree::AddItem(#TreeB,-1,Txt$+Str(N),0,2) 
                        Tree::DisableCheckBox(#TreeB,Id,#False)
                        Tree::SetData(#TreeB,Id,#Tp_Text,I)
                        Id+1
                  Next
            Next
      Next
      Tree::Draw(#TreeB)
EndProcedure
Procedure EventEdit(Type,Values)
      Debug "Edit"
EndProcedure
Procedure FillsTreeC()
      Protected N,Txt$,R,I,Id
      For N=1 To 4
            Txt$="Item "
            Tree::AddItem(#TreeC,-1,Txt$+Str(N),*IcoTable,0)
            Tree::SetData(#TreeC,Id,#TP_item,-1)
            Id+1
            For R=1 To 3
                  Txt$="Sub Item "
                  Tree::AddItem(#TreeC,-1,Txt$+Str(N),*IcoLabel,1)
                  Tree::SetData(#TreeC,Id,#Tp_SubItem,-1)
                  Id+1
                  For I=1 To 3
                        Txt$="Text "
                        Tree::AddItem(#TreeC,-1,Txt$+Str(N),0,2) 
                        Tree::DisableCheckBox(#TreeC,Id,#False)
                        Tree::SetData(#TreeC,Id,#Tp_Text,I)
                        Tree::AddItemButton(#TreeC,Id,*IcoEdit,24,@EventEdit())
                        Id+1
                  Next
            Next
      Next
      Tree::Draw(#TreeC)
EndProcedure
Procedure FillsTreeD()
      Protected N,Txt$,R,I,Id
      For N=1 To 4
            Txt$="Item "
            Tree::AddItem(gTreeD,-1,Txt$+Str(N),*IcoTable,0)
            Tree::SetData(gTreeD,Id,#TP_item,-1)
            Id+1
            For R=1 To 3
                  Txt$="Sub Item "
                  Tree::AddItem(gTreeD,-1,Txt$+Str(N),*IcoLabel,1)
                  Tree::SetData(gTreeD,Id,#Tp_SubItem,-1)
                  Id+1
            Next
      Next
      Tree::Draw(gTreeD)
EndProcedure
Procedure LoadHttpImage()
      InitNetwork()
      *IcoTable=ReceiveHTTPMemory("http://www.microdevweb.com/source/Tree/table.ico")
      If Not *IcoTable
            MessageRequester("LoadImage Error","Faillet http request ")
      EndIf
      *IcoLabel=ReceiveHTTPMemory("http://www.microdevweb.com/source/Tree/label.ico")
      If Not *IcoLabel
            MessageRequester("LoadImage Error","Faillet http request ")
      EndIf
      *IcoEdit=ReceiveHTTPMemory("http://www.microdevweb.com/source/Tree/pencil.ico")
      If Not *IcoEdit
            MessageRequester("LoadImage Error","Faillet http request ")
      EndIf
EndProcedure
Procedure SelectTreeA(Type,Values)
      Debug "Type: "+Str(Type)+" Values: "+Str(Values)
EndProcedure
Procedure EventCheckBoxTreeA(Item$)
      Debug Item$
EndProcedure
Procedure OpenMainFomr()
      LoadHttpImage()
      Protected Flag=#PB_Window_Maximize|#PB_Window_SystemMenu
      OpenWindow(#MainForm,0,0,800,600,"Tree module",Flag)
      gWF=WindowWidth(#MainForm)
      gHF=WindowHeight(#MainForm)
      Protected M=10,WT=(gWF/4)-(M*2),HT=gHF-(M*2),X=M,Y=M
      Tree::Create(#TreeA,X,Y,WT,HT)
      Tree::AddHelp(#TreeA,#TP_item,"Title Tree A","Your are above Item")
      Tree::AddHelp(#TreeA,#Tp_SubItem,"Title Tree A","Your are above Sub Item")
      Tree::AddHelp(#TreeA,#Tp_Text,"Title Tree A","Your are above Text")
      Tree::SetCallBackSelected(#TreeA,@SelectTreeA())
      Tree::SetCallBackCheckBox(#TreeA,@EventCheckBoxTreeA())
      X+M+WT
      Tree::Create(#TreeB,X,Y,WT,HT)
      Tree::SetIconSize(#TreeB,8,8,8)
      X+M+WT
      Tree::Create(#TreeC,X,Y,WT,HT)
      Tree::SetIconSize(#TreeC,12,12,48)
      Tree::SetColor(#TreeC,$00FF7F,$0000FF,$DCDCDC,$8515C7,$008CFF)
      X+M+WT
      gTreeD=Tree::Create(#PB_Any,X,Y,WT,HT)
      FillsTreeA()
      FillsTreeB()
      FillsTreeC()
      FillsTreeD()
EndProcedure
OpenMainFomr()
Global gEvent
Repeat
   gEvent=WaitWindowEvent()   
Until gEvent=#PB_Event_CloseWindow

Use Pb 5.73 lst and Windows 10

my mother-language isn't english, in advance excuse my mistakes.
User avatar
Kukulkan
Addict
Addict
Posts: 1396
Joined: Mon Jun 06, 2005 2:35 pm
Location: germany
Contact:

Re: Module Tree for PureBasic

Post by Kukulkan »

Looks nice :D Is this Windows only?
User avatar
microdevweb
Enthusiast
Enthusiast
Posts: 179
Joined: Fri Jun 13, 2014 9:38 am
Location: Belgique

Re: Module Tree for PureBasic

Post by microdevweb »

@Kukulkan,

Yes Windows only. If you want you can disable

Code: Select all

Procedure BalloonTip()
and

Code: Select all

;       Procedure DisplayHelp()
;             If FindMapElement(myTree()\myHelp(),Str(gIdHelp))
;                   If  *gHelpOn<>@myTree()\myHelp()
; ;                         Debug myTree()\myHelp()\msg$
;                         Protected Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO)
;                          Balloon\uFlags=#TTF_IDISHWND | #TTF_SUBCLASS
;                          Balloon\hWnd=GadgetID(myTree()\idCanvas)
;                          Balloon\uId=GadgetID(myTree()\idCanvas)
;                          Balloon\lpszText=@myTree()\myHelp()\msg$
;                          ;                          SendMessage_(gIdBalloon, #TTM_SETDELAYTIME, #TTDT_INITIAL,10)
;                          SendMessage_(gIdBalloon, #TTM_ADDTOOL, 0, Balloon)
;                          SendMessage_(gIdBalloon, #TTM_SETTITLE, #TOOLTIP_INFO_ICON,myTree()\myHelp()\Title$)
;                          SendMessage_(gIdBalloon, #TTM_ACTIVATE,1, 0)
;                          SendMessage_(gIdBalloon, #TTM_POPUP,0, 0)
;                         *gHelpOn=@myTree()\myHelp()
;                   EndIf
;             Else
;                   *gHelpOn=-1
;                   SendMessage_(gIdBalloon, #TTM_POP,0, 0)
;                   SendMessage_(gIdBalloon, #TTM_ACTIVATE,0,0)
; ;                   DisableBallon()
;             EndIf
;       EndProcedure

And after thas this should be multi Os, but the tree have not heelp function.
Use Pb 5.73 lst and Windows 10

my mother-language isn't english, in advance excuse my mistakes.
infratec
Always Here
Always Here
Posts: 7588
Joined: Sun Sep 07, 2008 12:45 pm
Location: Germany

Re: Module Tree for PureBasic

Post by infratec »

Hi,

may be a handy extension:

I downloaded the icons since I don't want always do it at program start.
Than I simply replaced the ReceiveHTTPMemory() stuff by LoadImage() and ...
failed

Then I extended your tree.pbi at 2 positions with something like this:

In AddItem():

Code: Select all

If IsImage(Image)
  \Icone = Image
Else
  \Icone=CatchImage(#PB_Any,Image)
EndIf
In AddItemButton():

Code: Select all

If IsImage(icone)
  \image=icone
Else
  \image=CatchImage(#PB_Any,icone)
EndIf
And it worked :mrgreen:

Bernd
User avatar
microdevweb
Enthusiast
Enthusiast
Posts: 179
Joined: Fri Jun 13, 2014 9:38 am
Location: Belgique

Re: Module Tree for PureBasic

Post by microdevweb »

Hello infratec,

It's just for this sample than i load image by http. For normal use you must include image on Datasection with includeBinary, the tree module catch image in this engine . But thank's for your advise.
Use Pb 5.73 lst and Windows 10

my mother-language isn't english, in advance excuse my mistakes.
Post Reply