Tree Gadget selection problem

Just starting out? Need help? Post your questions and find answers here.
Allen
Enthusiast
Enthusiast
Posts: 103
Joined: Wed Nov 10, 2021 2:05 am

Tree Gadget selection problem

Post by Allen »

Hi,

I am learning to use the tree gadget. I modified the example of the help file and want to get the item whenever its checkbox is checked. In below code the message appear twice whenever I tick a item's checkbox. Please advise.

Working in win 10 pro PB 6.11

Thanks

Allen

Code: Select all

  If OpenWindow(0, 0, 0, 355, 180, "TreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    TreeGadget(0, 10, 10, 160, 160)                                         ; TreeGadget standard
    TreeGadget(1, 180, 10, 160, 160, #PB_Tree_CheckBoxes | #PB_Tree_NoLines)  ; TreeGadget with Checkboxes + NoLines
    For ID = 0 To 1
      For a = 0 To 10
        AddGadgetItem (ID, -1, "Normal Item "+Str(a), 0, 0) ; if you want to add an image, use
        AddGadgetItem (ID, -1, "Node "+Str(a), 0, 0)        ; ImageID(x) as 4th parameter
        AddGadgetItem(ID, -1, "Sub-Item 1", 0, 1)    ; These are on the 1st sublevel
        AddGadgetItem(ID, -1, "Sub-Item 2", 0, 1)
        AddGadgetItem(ID, -1, "Sub-Item 3", 0, 1)
        AddGadgetItem(ID, -1, "Sub-Item 4", 0, 1)
        AddGadgetItem (ID, -1, "File "+Str(a), 0, 0) ; sublevel 0 again
      Next
    Next
    Repeat : 
      Event=WaitWindowEvent() 
      If  Event= #PB_Event_CloseWindow
        End
      EndIf
      If Event= #PB_Event_Gadget
        Select EventGadget()  
          Case 1
            SelectedItem=GetGadgetState(1)
            If SelectedItem>-1
              ItemState=GetGadgetItemState(1,SelectedItem)
              If ItemState & #PB_Tree_Checked  
                MessageRequester(" Selected Item Info ",Str(SelectedItem)+" "+GetGadgetItemText(1,SelectedItem))
              EndIf
            EndIf
        EndSelect
      EndIf
    ForEver
  EndIf
User avatar
Kiffi
Addict
Addict
Posts: 1484
Joined: Tue Mar 02, 2004 1:20 pm
Location: Amphibios 9

Re: Tree Gadget selection problem

Post by Kiffi »

You get more than one event when you tick a checkbox: #PB_EventType_LeftClick and #PB_EventType_Change

You can insert this into your code as a test:

Code: Select all

      [...]
      Select EventGadget()  
        Case 1
          
          Select EventType()
              
            Case #PB_EventType_LeftClick        : Debug "#PB_EventType_LeftClick"
            Case #PB_EventType_LeftDoubleClick  : Debug "#PB_EventType_LeftDoubleClick"
            Case #PB_EventType_RightClick       : Debug "#PB_EventType_RightClick"
            Case #PB_EventType_RightDoubleClick : Debug "#PB_EventType_RightDoubleClick"
            Case #PB_EventType_Change           : Debug "#PB_EventType_Change"
            Case #PB_EventType_DragStart        : Debug "#PB_EventType_DragStart"
              
          EndSelect
          
          Debug "----------------"
          
          SelectedItem=GetGadgetState(1)
          [...]
Hygge
Allen
Enthusiast
Enthusiast
Posts: 103
Joined: Wed Nov 10, 2021 2:05 am

Re: Tree Gadget selection problem

Post by Allen »

Hi,

Kiffi, Thank you for the quick response and the information. I add checking for the EventType and it now work as expected.

Thanks

Allen

Code: Select all

  If OpenWindow(0, 0, 0, 355, 180, "TreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    TreeGadget(0, 10, 10, 160, 160)                                         ; TreeGadget standard
    TreeGadget(1, 180, 10, 160, 160, #PB_Tree_CheckBoxes | #PB_Tree_NoLines)  ; TreeGadget with Checkboxes + NoLines
    For ID = 0 To 1
      For a = 0 To 10
        AddGadgetItem (ID, -1, "Normal Item "+Str(a), 0, 0) ; if you want to add an image, use
        AddGadgetItem (ID, -1, "Node "+Str(a), 0, 0)        ; ImageID(x) as 4th parameter
        AddGadgetItem(ID, -1, "Sub-Item 1", 0, 1)    ; These are on the 1st sublevel
        AddGadgetItem(ID, -1, "Sub-Item 2", 0, 1)
        AddGadgetItem(ID, -1, "Sub-Item 3", 0, 1)
        AddGadgetItem(ID, -1, "Sub-Item 4", 0, 1)
        AddGadgetItem (ID, -1, "File "+Str(a), 0, 0) ; sublevel 0 again
      Next
    Next
    Repeat : 
      Event=WaitWindowEvent() 
      If  Event= #PB_Event_CloseWindow
        End
      EndIf
      EventType=EventType()
      If Event= #PB_Event_Gadget
        Select EventGadget()  
          Case 1 
            If EventType=#PB_EventType_Change
              SelectedItem=GetGadgetState(1)
              If SelectedItem>-1
                ItemState=GetGadgetItemState(1,SelectedItem)
                If ItemState & #PB_Tree_Checked  
                  MessageRequester(" Selected Item Info ",Str(SelectedItem)+" "+GetGadgetItemText(1,SelectedItem))
                EndIf
              EndIf
            EndIf
        EndSelect
      EndIf
    ForEver
  EndIf
Post Reply